python - Mathplotlib 在函数下的曲线 + 条上绘制 delta
问题描述
我有这个代码:
import matplotlib.pyplot as plt
import numpy as np
gamma = 0.5
p = np.linspace(1/253, 253/253, 253)
y = np.power(p, gamma)
plt.plot(p, y)
plt.xlabel('p')
plt.ylabel('\u03C6(p)')
plt.title(' ')
plt.show()
这给了我这个数字:https ://ibb.co/M7B1PD1
我有这个代码:
p = np.linspace(1/253, 253/253, 253)
b = 0.5
phi_p = np.power((b * p), (b-1))
plt.plot(p, phi_p)
plt.xlabel('p')
plt.ylabel('\u03A6(p)')
plt.title(' ')
plt.show()
这给了我这个数字:https ://ibb.co/5xRR1k6
现在我想要第一个数字:https ://ibb.co/nzdpfNc 和第二个数字: https ://ibb.co/yYCp7HD
因此,在第一张图片中,应该显示曲线的增量,在第二张图片中,应该在曲线下方绘制每个 i in (0,253) 的条形。
有没有办法用 mathplotlib 做到这一点?我有在曲线下绘制直方图的想法,但我没有很好地解决这个问题..
解决方案
要绘制曲线下的增量,只需一次将数据点配对,然后绘制它。例如
x_data=[1,4,6]
y_data=[2,3,7]
delta_to_plot_x=[1,4,4,6,6]
delta_to_plot_y=[2,2,3,3,7]
这个函数应该可以生成正确的值。
def make_delta_for_plot(x,y):
new_x=[val for val in x for _ in (0, 1)]
new_y=[val for val in y for _ in (0, 1)]
new_x.pop(0)
new_y.pop(-1)
return new_x,new_y
对于第二个图,seaborn.distplot
可以同时绘制带有直方图的分布(并且它使用 matplotlib,因此它可以与您的其余代码一起正常工作)。链接中有很多例子