在 python 中绘制条形图
Plotting bar plot in python
我正在尝试绘制具有多种颜色的单个条形图...
import numpy as np
width = 0.3
y1 =[78.0]
y2= [70863.0]
y3 =[138441.0]
y4 =[ 8223.0]
x = np.range(1)
p1 = plt.bar(x, y1, width=width, color='r')
p2 = plt.bar(x, y2, width=width, color='b')
p3 = plt.bar(x, y3, width= width, color='g')
p4 = plt.bar(x, y4, width= width, color='y')
plt.show()
1) 情节很丑。我如何控制绘图的宽度
2)剧情不对..y2少了
我假设您的代码与您输入的代码不完全相同,例如 np.range(1)
returns 一个错误并且您的字符串上有一个未闭合的字符串y4 绘图命令。因为,做一些小的编辑,我可以重现你的情节,除了我的颜色和你的不同。如果p3的颜色是'b',p4的颜色是'g',那么你可以做一些简单的修正。
防止隐藏条
当您在 x = 0 处绘制条形图时,它会自行排列在您的图的前面。如果这意味着它掩盖了某些东西,那么您的旧数据将被掩盖。在这种情况下,您在顶部 y2 上绘制 y3。有两种方法可以解决此问题:
- 使用
zorder
kwarg 设置事物出现的顺序。例如,带有 zorder=5
的事物出现在带有 zorder=4
的事物之上。请参阅 the documentation 了解 zorder 的默认值。在这个特定的例子中,你会想要
p1 = plt.bar(x, y1, width=width, color='r',zorder=4)
p2 = plt.bar(x, y2, width=width, color='b',zorder=2)
p3 = plt.bar(x, y3, width= width, color='g',zorder=1)
p4 = plt.bar(x, y4, width= width, color='y',zorder=3)
按从大到短的顺序绘制它们。如果您的绘图命令是 p3、p2、p4,然后是 p1,那么它们将被绘制在彼此之上而不会覆盖它们中的任何一个。
Space 他们不一样。当您当前绘制它们时,它们都位于同一点。如果您改变 x 坐标,例如 x1,x2,x3,x4 = range(4)
,然后将绘图命令更改为,例如p1 = plt.bar(x1, y1, width=width, color='r')
这样你就不会丢失柱状图了。
控制宽度(和高度)
Matplotlib 使用 plt.xlim() 和 plt.ylim() 控制绘图的范围。要将绘图的 x 轴设置为从 0 到 4,您可以使用 plt.xlim(0,4)
。同样,如果您想在绘图顶部添加一些白色 space 以改善外观,您可以使用 plt.ylim(0, 150000).
如果您的陈述是询问如何为错误栏设置不同的宽度,那么您可以使用 plt.bar()
中的 width=
kwarg。现在,它被设置为 0.3,因为您之前定义了变量 width=0.3
。改变它,无论是根据具体情况还是通过改变变量本身,都将控制条形的宽度。
其他两条评论
如果您只是绘制一个在一个点上有一个点的条形图,您实际上不需要它们是列表。您可以只使用 plt.bar(2,4)
在 x=2 处生成一个 4 个单位高的条(这也表明您不需要设置 p1 = plt.bar
...)
如果您要显示跨越这么多数量级的数据,将 y 尺度设置为对数可能会有所帮助。这可以用 plt.yscale('log',noposy=clip)
来完成。后一个 kwarg 在 y 值为 0 的情况下很有用——它只会将其从图中剪掉而不是破坏。
用特定列中每个级别的出现次数绘制级别的简单方法:这对您的情况可能很有用。这里数据(DF)中的输出列有两个级别(0)和(1),Y 轴显示每个级别的计数。
# Target varible bar chart
def snsplot(t):
sns.countplot(x=t,data=data,palette='hls')
print('The target variable',t, 'as shown as bar chart')
plt.show()
#plt.savefig('count_plot')
snsplot(Target_col_Y)
我正在尝试绘制具有多种颜色的单个条形图...
import numpy as np
width = 0.3
y1 =[78.0]
y2= [70863.0]
y3 =[138441.0]
y4 =[ 8223.0]
x = np.range(1)
p1 = plt.bar(x, y1, width=width, color='r')
p2 = plt.bar(x, y2, width=width, color='b')
p3 = plt.bar(x, y3, width= width, color='g')
p4 = plt.bar(x, y4, width= width, color='y')
plt.show()
1) 情节很丑。我如何控制绘图的宽度
2)剧情不对..y2少了
我假设您的代码与您输入的代码不完全相同,例如 np.range(1)
returns 一个错误并且您的字符串上有一个未闭合的字符串y4 绘图命令。因为,做一些小的编辑,我可以重现你的情节,除了我的颜色和你的不同。如果p3的颜色是'b',p4的颜色是'g',那么你可以做一些简单的修正。
防止隐藏条
当您在 x = 0 处绘制条形图时,它会自行排列在您的图的前面。如果这意味着它掩盖了某些东西,那么您的旧数据将被掩盖。在这种情况下,您在顶部 y2 上绘制 y3。有两种方法可以解决此问题:
- 使用
zorder
kwarg 设置事物出现的顺序。例如,带有zorder=5
的事物出现在带有zorder=4
的事物之上。请参阅 the documentation 了解 zorder 的默认值。在这个特定的例子中,你会想要
p1 = plt.bar(x, y1, width=width, color='r',zorder=4)
p2 = plt.bar(x, y2, width=width, color='b',zorder=2)
p3 = plt.bar(x, y3, width= width, color='g',zorder=1)
p4 = plt.bar(x, y4, width= width, color='y',zorder=3)
按从大到短的顺序绘制它们。如果您的绘图命令是 p3、p2、p4,然后是 p1,那么它们将被绘制在彼此之上而不会覆盖它们中的任何一个。
Space 他们不一样。当您当前绘制它们时,它们都位于同一点。如果您改变 x 坐标,例如
x1,x2,x3,x4 = range(4)
,然后将绘图命令更改为,例如p1 = plt.bar(x1, y1, width=width, color='r')
这样你就不会丢失柱状图了。
控制宽度(和高度)
Matplotlib 使用 plt.xlim() 和 plt.ylim() 控制绘图的范围。要将绘图的 x 轴设置为从 0 到 4,您可以使用 plt.xlim(0,4)
。同样,如果您想在绘图顶部添加一些白色 space 以改善外观,您可以使用 plt.ylim(0, 150000).
如果您的陈述是询问如何为错误栏设置不同的宽度,那么您可以使用 plt.bar()
中的 width=
kwarg。现在,它被设置为 0.3,因为您之前定义了变量 width=0.3
。改变它,无论是根据具体情况还是通过改变变量本身,都将控制条形的宽度。
其他两条评论
如果您只是绘制一个在一个点上有一个点的条形图,您实际上不需要它们是列表。您可以只使用
plt.bar(2,4)
在 x=2 处生成一个 4 个单位高的条(这也表明您不需要设置p1 = plt.bar
...)如果您要显示跨越这么多数量级的数据,将 y 尺度设置为对数可能会有所帮助。这可以用
plt.yscale('log',noposy=clip)
来完成。后一个 kwarg 在 y 值为 0 的情况下很有用——它只会将其从图中剪掉而不是破坏。
用特定列中每个级别的出现次数绘制级别的简单方法:这对您的情况可能很有用。这里数据(DF)中的输出列有两个级别(0)和(1),Y 轴显示每个级别的计数。
# Target varible bar chart
def snsplot(t):
sns.countplot(x=t,data=data,palette='hls')
print('The target variable',t, 'as shown as bar chart')
plt.show()
#plt.savefig('count_plot')
snsplot(Target_col_Y)