2017-04-21 271 views
0

我想绘制matplotlib条形图,左边是一个y轴,右边是另一个共同的x轴。范围栏打开x轴。 Perc列位于左侧y轴,计数列位于右侧y轴。请告知如何继续。Matplotlib条形图与两个Y轴和公共X轴

的样本数据是在这里 - SampleFileHere

enter image description here

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) 
+0

我想提供一个链接到Excel。请暂停 。我只是在搜索如何去做 – Harish

+0

已经提供了链接到数据 – Harish

回答

0

您不能将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() 

enter image description here