pandas 如何在同一个海运图中用不同的Y轴很好地绘制条形图和线图?

ws51t4hk  于 2023-05-15  发布在  其他
关注(0)|答案(2)|浏览(101)

我有两组不同的数据,它们有一个共同的索引,我想在同一个图中将第一组数据表示为条形图,将第二组数据表示为线图。我目前的做法类似于以下内容。

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()似乎在前一个画布上创建了一个新画布,在条形图的顶部可以清楚地看到白色。
有没有什么方法可以不包括白色的情况下绘制这个图?

ql3eal8s

ql3eal8s1#

您可以使用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)

vnjpjtjt

vnjpjtjt2#

必须删除第二个轴的网格线。添加到代码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()

相关问题