如何在具有不同 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()
似乎在前一个之上创建了一个新的 canvas,并且在条形图顶部可以清楚地看到白线。
有没有办法在不包括白线的情况下绘制它?
您必须删除第二个轴的网格线。添加到代码 ax2.grid(False)
。然而,第二个轴的 y 刻度将不会与第一个 y 轴的 y 刻度对齐,如下所示:
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()
您可以使用 twinx()
方法与 seaborn 一起创建一个单独的 y-axis,一个用于线图,另一个用于条形图。要控制绘图的样式(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)
我有两组具有共同索引的不同数据,我想在同一张图中将第一个数据表示为条形图,将第二个数据表示为线图。我目前的做法和下面类似。
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()
似乎在前一个之上创建了一个新的 canvas,并且在条形图顶部可以清楚地看到白线。
有没有办法在不包括白线的情况下绘制它?
您必须删除第二个轴的网格线。添加到代码 ax2.grid(False)
。然而,第二个轴的 y 刻度将不会与第一个 y 轴的 y 刻度对齐,如下所示:
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()
您可以使用 twinx()
方法与 seaborn 一起创建一个单独的 y-axis,一个用于线图,另一个用于条形图。要控制绘图的样式(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)