将值和概率转换为Matplotlib累积分布函数

时间:2018-03-29 01:20:48

标签: python pandas matplotlib

我有一个图表显示累积分布值和一个生存函数'同样。

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轴以显示百分比。

怎么做?

3 个答案:

答案 0 :(得分:2)

使用matplotlib.axes.Axes.twinxmatplotlib.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()