如何在同一海洋图中使用不同的Y轴绘制条形图和线形图?

Mar*_*man 5 python visualization matplotlib pandas seaborn

我有两个具有相同索引的不同数据集,我想在同一张图中将第一组数据表示为条形图,将第二组数据表示为线形图。我当前的方法与以下类似。

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

结果与此类似

相同数据的条形图和线形图

此图像非常好,几乎正确。我唯一的问题是,ax.twinx()似乎在前一个画布上创建了一个新画布,并且白线清晰显示在小程序图的顶部。

有什么办法可以在不包括白线的情况下进行绘制?

ath*_*aki 7

您可以将twinx()method 与 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)
Run Code Online (Sandbox Code Playgroud)

共享相同 x 轴和不同 y 轴的条形图和线图 seaborn 示例


Ser*_*ity 5

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

在此处输入图片说明

  • 这个情节中如何使用seaborn? (10认同)