我有一些按類別分組的資料(即“a”、“b”、“c”等),我想在每個類別中的每對點之間畫一條線。
基本上,每個類別都有一個“之前”和“之后”的值,所以我用色調將它分開。這是現在的情節,但最終我希望給定類別的每個“之前”和“之后”值都與一條線連接(即 a_before 連接到 a_after,b_before 連接到 b_after 等)。
sns.pointplot (x = ‘category’, y = ‘correlation’,
hue = ‘time’, linestyles = ‘’, dodge = .3, data = sample_data)

我將線型設定為 '' 因為否則它會連接所有點,而不僅僅是成對的點。有沒有辦法用 seaborn 做到這一點?
謝謝!
編輯:我希望它看起來像這樣:

(我將線型設定為 '' 因為否則它會連接所有點,而不僅僅是成對的點。)
uj5u.com熱心網友回復:
Matplotlib存盤所產生的點進入lines的領域ax。
sns.pointplot()總是生成(可能是空的)置信區間,這些區間也存盤在行中。相同的位置也存盤在ax.collections.
您可以遍歷collections[0]并collections[1]訪問(躲避)點的確切位置。然后,您可以在它們之間畫線:
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
sample_data = pd.DataFrame({'category': ['a', 'a', 'b', 'b', 'c', 'c'],
'correlation': [0.33, 0.58, 0.51, 0.7, 0.49, 0.72],
'time': ['before', 'after', 'before', 'after', 'before', 'after']})
ax = sns.pointplot(x='category', y='correlation', hue='time', palette=['skyblue', 'dodgerblue'],
linestyles='', dodge=.3, data=sample_data)for (x0, y0), (x1, y1) in zip(ax.collections[0].get_offsets(), ax.collections[1].get_offsets()):
ax.plot([x0, x1], [y0, y1], color='black', ls=':', zorder=0)
ax.axhline(0, color='black', ls='--')
ax.set_ylim(-1, 1)
plt.show()

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/389344.html
標籤:Python 熊猫 matplotlib 海生
