【问题标题】:Matplotlib Bar Plot with two Y-Axis and Common X-Axis具有两个 Y 轴和公共 X 轴的 Matplotlib 条形图
【发布时间】:2017-04-22 08:21:49
【问题描述】:

我正在尝试绘制 matplotlib 条形图,左侧有一个 y 轴,右侧有另一个 y,有一个共同的 x 轴。范围列在 x 轴上。 Perc 列位于左侧 y 轴,计数列位于右侧 y 轴。请告知如何进行。

样本数据在这里 - SampleFileHere

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


fig = plt.figure()
ax = td['perc'].plot(kind="bar", alpha=0.7)
plt.xticks(td['ranges'].tolist())
ax2 = ax.twinx()
ax2.plot(ax.get_xticks(),td['count'],marker='o', c='navy', linewidth=4)

我收到以下错误。

<ipython-input-24-c1d398c0d012> in <module>()
      7 fig = plt.figure()
      8 ax = td['perc'].plot(kind="bar", alpha=0.7)
----> 9 plt.xticks(td['ranges'].tolist())
     10 ax2 = ax.twinx()
     11 ax2.plot(ax.get_xticks(),td['count'],marker='o', c='navy', linewidth=4)

【问题讨论】:

  • 我正在尝试提供指向 Excel 的链接。请暂停 。我只是在搜索如何做
  • 已提供数据链接

标签: pandas matplotlib dataframe seaborn


【解决方案1】:

您不能将 xticks 设置为某些非数字值。相反,您需要将 xticklabels 设置为“范围”列中的条目。

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

counts = np.array([56000,900,5000,6000,30000,3500,300]).astype(float)
perc =  counts/counts.sum()
df = pd.DataFrame({"range": list("ABCDEFG"),"count":counts, "perc":perc})

fig = plt.figure()
ax = df['perc'].plot(kind="bar", alpha=0.7)

ax2 = ax.twinx()
ax2.plot(ax.get_xticks(),df['count'],marker='o', c='navy', linewidth=4)

ax.set_xticklabels(df['range'])
ax.set_ylim(0,1.3*df["perc"].max())
ax2.set_ylim(0,1.3*df["count"].max())
ax2.grid(False)
plt.show()

【讨论】: