簡體   English   中英

如何在具有不同 Y 軸的同一個 seaborn 圖中很好地制作條形圖和線圖?

[英]How can I make a barplot and a lineplot in the same seaborn plot with different Y axes nicely?

我有兩組具有共同索引的不同數據集,我想在同一圖中將第一組表示為條形圖,將第二組表示為線圖。 我目前的方法類似於以下內容。

ax = pt.a.plot(alpha = .75, kind = 'bar')
ax2 = ax.twinx()
ax2.plot(ax.get_xticks(), pt.b.values, alpha = .75, color = 'r')

結果與此類似

相同數據的條形圖和線圖

這張圖片非常好,幾乎是正確的。 我唯一的問題是ax.twinx()似乎在前一個畫布的頂部創建了一個新畫布,並且在條形圖的頂部可以清楚地看到白線。

有沒有辦法在不包括白線的情況下繪制它?

您可以將twinx()方法與 seaborn 一起使用來創建一個單獨的 y 軸,一個用於線圖,另一個用於條形圖。 要控制繪圖的樣式(seaborn 的默認樣式為darkgrid),您可以使用 set_style 方法並指定首選主題。 如果您設置style=None它會重置為沒有網格線的白色背景。 您也可以嘗試whitegrid 如果要進一步自定義網格線,可以使用ax2.grid(False)在軸級別上進行。

import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns

matplotlib.rc_file_defaults()
ax1 = sns.set_style(style=None, rc=None )

fig, ax1 = plt.subplots(figsize=(12,6))

sns.lineplot(data = df['y_var_1'], marker='o', sort = False, ax=ax1)
ax2 = ax1.twinx()

sns.barplot(data = df, x='x_var', y='y_var_2', alpha=0.5, ax=ax2)

共享相同 x 軸和不同 y 軸的條形圖和線圖 seaborn 示例

您必須刪除第二個軸的網格線。 添加到代碼ax2.grid(False) 但是,第二個軸的 y-ticks 不會與第一個 y 軸的 y-ticks 對齊,如下所示:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(pd.Series(np.random.uniform(0,1,size=10)), color='g')
ax2 = ax1.twinx()
ax2.plot(pd.Series(np.random.uniform(0,17,size=10)), color='r')
ax2.grid(False)
plt.show()

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM