在 Python 中创建条形图

发布于 2024-12-11 16:09:11 字数 965 浏览 1 评论 0原文

我尝试用 python 创建条形图时遇到一些问题。我的图表代码如下所示:

import matplotlib
matplotlib.use('Agg')
from pylab import *
import calendar

def webshow(img):
    savefig(img,dpi=500)
    print 'Content-Type: text/html\n'
    print '<img width="800" height="400" src="'+img+'" />'

genres = []
n = 0
for c in sorted_list: 
    genres.append(sorted_list[n][0])
    n += 1

grosses = []
a = 0
for c in sorted_list:
    grosses.append(sorted_list[a][1])
    a += 1

clf()
bar(arange(len(grosses)),grosses)
xticks( arange(len(genres)),genres, rotation=80)
webshow("barchart.png")

我的图表如下所示:

一只忙碌的猫
(来源:tumblr.com

基本上是我的主要问题是这些值是带科学记数法的小数。如果可能的话,我想以数百万的数量展示它们。另外,我不知道如何制作,这样流派就不会在底部被切断。感谢您的帮助!

I have a couple of problems with the Bar Chart that I'm trying to create in python. My code for the chart looks like this:

import matplotlib
matplotlib.use('Agg')
from pylab import *
import calendar

def webshow(img):
    savefig(img,dpi=500)
    print 'Content-Type: text/html\n'
    print '<img width="800" height="400" src="'+img+'" />'

genres = []
n = 0
for c in sorted_list: 
    genres.append(sorted_list[n][0])
    n += 1

grosses = []
a = 0
for c in sorted_list:
    grosses.append(sorted_list[a][1])
    a += 1

clf()
bar(arange(len(grosses)),grosses)
xticks( arange(len(genres)),genres, rotation=80)
webshow("barchart.png")

My chart looks like this:

a busy cat
(source: tumblr.com)

Basically my main problem is that the values are in decimals with scientific notation. I want to present them in millions if possible. Also, I'm not sure how to make it so the genres are not cut off at the bottom. Thank you for any help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

孤千羽 2024-12-18 16:09:11

首先,我将使用 figure 对象来处理:这使得更容易根据您的喜好构建绘图。要构建图表,应执行以下操作:

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)          # Remark 1
ax = fig.add_subplot(111)
ax.bar(arange(len(grosses)), grosses)
ax.ticklabel_format(style='plain')       # Remark 2
ax.set_xticks(arange(len(genres)))
ax.set_xticklabels(genres, rotation=80)
savefig('barchart.png', dpi=500)

以及以下注释:

  1. 这会调整图像的大小,在本例中,它会放大底部以适合您的标签。在大多数情况下,您大致知道要输入的数据,因此这就足够了。如果您使用的是 matplotlib 版本 1.1 或更高版本,您可以使用 ight_layout 函数会自动为您执行此操作。另一种方法是根据所有轴标签的边界框自行计算所需的大小,如下所示 此处,但您需要一个渲染器才能确定所有标签的大小。
  2. 通过指定标签格式(使用 sciplain),您可以更改值的呈现。当使用plain时,它只会按原样呈现值。有关详细信息,请参阅有关此函数的文档。请注意,您还可以使用 set_yticklabels 函数的 text 参数进一步控制格式(当然该函数也可用于 x 轴。

First up, I would use a figure object to work on: this makes it easier to construct the plot to your liking. To construct your graph, the following should do:

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)          # Remark 1
ax = fig.add_subplot(111)
ax.bar(arange(len(grosses)), grosses)
ax.ticklabel_format(style='plain')       # Remark 2
ax.set_xticks(arange(len(genres)))
ax.set_xticklabels(genres, rotation=80)
savefig('barchart.png', dpi=500)

Along with the following remarks:

  1. This adjusts the size of your image, in this case it enlarges the bottom to be able to fit your labels. In most cases you roughly know the data you are going to put in, so that should suffice. If you are using matplotlib version 1.1 or higher, you could use the tight_layout function to do this automatically for you. The alternative is to calculate the needed size by yourself based on the bounding boxes of all axes labels as shown here, but you need a renderer for this to be able to determine the sizes of all labels.
  2. By specifying the label format (using either sci or plain), you can change the rendering of the values. When using plain, it will just render the value as is. See the docs on this function for more info. Note that you can also use the set_yticklabels function's text argument to control the formatting further (of course that function is also available for the x axis.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文