import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# generate data
rng = np.random.default_rng(12)
x = np.linspace(0, np.pi, 50)
y1, y2 = np.sin(x[:25]), np.cos(x[25:])
cat = rng.choice(["a", "b", "c"], 50)
data = pd.DataFrame({"x": x , "y" : y1.tolist() y2.tolist(), "cat": cat})
# generate figure
fig, ax = plt.subplots(figsize=(8, 5), ncols=2)
g0 = sns.lineplot(x="x", y="y", data=data, hue='cat', ls="--", ax=ax[0])
g1 = sns.lineplot(x="x", y="y", data=data, hue='cat', ls="--", ax=ax[1])
g1.get_lines()[0].set_color('black')
print(ax[0].get_lines())
for line in ax[0].get_lines():
print(line.get_label())
plt.tight_layout()
plt.show()
這將回傳一個串列:
<a list of 6 Line2D objects>
其中前三個物件是圖中左側子圖中的彩色虛線,通過更改右側子圖中這些線之一的顏色來確認。

但我無法理解串列中最后三個 Line2D 物件是什么ax[0].get_lines()。
如果我嘗試使用訪問 Line2D 物件的標簽
[line.get_label() for line in ax[0].get_lines()]
它給了['_child0', '_child1', '_child2', 'b', 'a', 'c']。
但是串列中的最后三個 Line2D 物件的行為不像通常的 Line2D 物件,因為
ax[0].get_lines()[-1].set_lw(0.2)沒有改變圖中任何可感知的東西。- 我預計
ax[0].get_lines()[-1].remove()會洗掉左側子圖中的綠色圖例線,但它沒有效果。
那么,串列中最后三個 Line2D 物件(標簽中ax[0].get_lines()沒有字串_child)代表什么?
使用 matplotlib (v3.5.1) 和 seaborn (v0.11.2) 生成。
uj5u.com熱心網友回復:
這些是用于創建圖例的虛擬線。由于有很多選擇,Seaborn 的傳說可能相當復雜。您可能想查看
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/526310.html
