我有一个图表显示累积分布值和一个生存函数'同样。
import numpy as np
import matplotlib.pyplot as plt
values, base = np.histogram(serWEB, bins=100)
cumulative = np.cumsum(values)
# plot the cumulative function
plt.plot(base[:-1], cumulative, c='blue')
plt.title('Cumulative Distribution')
plt.xlabel('X Data')
plt.ylabel('Y Data')
# survival function next
plt.plot(base[:-1], len(serWEB)-cumulative, c='green')
plt.show()
此图显示的值为主Y轴。 我有兴趣在右侧添加第二个Y轴以显示百分比。
怎么做?
答案 0 :(得分:2)
使用matplotlib.axes.Axes.twinx
和matplotlib.ticker.Formatter
的组合可以满足您的需求。首先获得当前轴,然后创建一个" twin"它使用twinx()
:
import matplotlib.ticker as mtick
...
ax = plt.gca() # returns the current axes
ax = ax.twinx() # create twin xaxis
ax.yaxis.set_major_formatter(mtick.PercentFormatter(1.0))
您可以通过多种方式设置百分比格式:
PercentFormatter()
接受三个参数,max,decimals,symbol。 max允许您设置轴上对应于100%的值。 如果您有0.0到1.0的数据并且想要显示,那么这很好 从0%到100%。只做PercentFormatter(1.0)。其他两个参数允许您设置小数点后的位数和符号。它们默认为无和'%', 分别。 decimals = None将自动设置数量 小数点基于您显示的轴数。 [1]
答案 1 :(得分:0)
查看ax.twinx()
,例如使用在this question中及其答案。
尝试这种方法:
ax = plt.gca() # get current active axis
ax2 = ax.twinx()
ax2.plot(base[:-1], (len(serWEB)-cumulative)/len(serWEB), 'r')
答案 2 :(得分:0)
以下是在左侧Y轴上绘制值的基本外壳,在右侧Y轴上绘制比率(ax2
)。我根据评论使用了twinx()
函数。
import numpy as np
import matplotlib.pyplot as plt
# evaluate the histogram
import matplotlib.ticker as mtick
values, base = np.histogram(serWEB, bins=100)
#evaluate the cumulative
cumulative = np.cumsum(values)
# plot the cumulative function
plt.plot(base[:-1], cumulative, c='blue')
plt.title('Chart Title')
plt.xlabel('X Label')
plt.ylabel('Y Label')
#plot the survival function
plt.plot(base[:-1], len(serWEB)-cumulative, c='green')
# clone the Y-axis and make a Y-Axis #2
ax = plt.gca()
ax2 = ax.twinx()
# on the second Y-Axis, plot the ratio from 0 to 1
n, bins, patches = ax2.hist(serWEB, 100, normed=True, histtype='step',
cumulative=True)
plt.xticks(np.arange(0,900, step = 14))
plt.xlim(0, 200)
plt.show()