How to show only the outline of a bar plot matplotlib

元气小坏坏 提交于 2021-02-05 05:42:22

问题


I'm plotting data as a bar plot in matplotlib and am trying to only show the outline of the bars, so that it appears as a 'stepped graph' of the data.

I've added my code below along with an image of the desired output.

plt.bar(x, y, align='center', width=0.1, edgecolor='black', color='none')

The plot I have:

The plot I would like:


Are there any other libraries that may be able to produce this? The bar keyword arguments don't seem to have anything that can.


回答1:


Your image looks like a function that is horizontal around each x,y value. The following code simulates this:

  • for every x,y: create two new points one at x-0.5 and one at x+0.5, both with the same y
  • to close the shape at the ends, add (x[0]-0.5, 0) at the start and (x[-1]+0.5, 0) at the end.
import numpy as np
from matplotlib import pyplot as plt

x = np.arange(0, 30, 1)
y = np.random.uniform(2, 10, 30)
xs = [x[0] - 0.5]
ys = [0]
for i in range(len(x)):
    xs.append(x[i] - 0.5)
    xs.append(x[i] + 0.5)
    ys.append(y[i])
    ys.append(y[i])
xs.append(x[-1] + 0.5)
ys.append(0)
plt.plot(xs, ys, color='dodgerblue')
# optionally color the area below the curve
plt.fill_between(xs, 0, ys, color='gold')

PS: @AsishM. mentioned in the comments that matplotlib also has its own step function. If that function fulfils, please use that one. If you need some extra control or variation, this answer could give a start, such as coloring the area below the curve or handling the shape at the ends.



来源:https://stackoverflow.com/questions/59446648/how-to-show-only-the-outline-of-a-bar-plot-matplotlib

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!