Matplotlib 在函数下的曲线 + 条上绘制增量

Mathplotlib draw delta on curve + bars under function

我有这个代码:

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

因此在第一张图片中应显示曲线的增量,在第二张图片中应在曲线下方绘制 (0,253) 中每个 i 的条。

有没有办法用 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,因此它可以与您的其余代码一起正常工作)。 link

中有很多示例

第二个图我是这样解的:

b = 0.5

p = np.array(np.arange(1/253, 253/253, 1/253))
phi_p = np.power((b * p), (b-1))

x = np.array(np.arange(1/253,253/253,1/253))

liste = []
for i in phi_p:
    liste.append(i)
y = liste

plt.plot(p, phi_p, color='orange')
plt.bar(x0, liste, width=(1/253), edgecolor='black')
plt.xlabel('p')
plt.ylabel('\u03A6(p)')
plt.title(' ')
plt.show()