使用matplotlib.pyplot为我的x轴指定值?

时间:2016-03-23 17:32:01

标签: python matplotlib

我无法使用matplotlib.pyplot指定x轴的值。

在某些图像中,chart.xticks(years)解决了问题,但似乎当x轴值的集合太小时,它会使用默认值,如[0,1,2,... 。,N]。

有效的案例: Image

不起作用的案例: Image

我的代码:

import matplotlib.pyplot as chart
from matplotlib import lines

   # Settings
    chart.title(file_name)
    chart.xlabel('Years')
    chart.ylabel('Committers/Contributions')
    chart.ylim([0,highest_value + 100])
    chart.xlim(first_year,2017)

    # Values
    committer_line = chart.plot(committers_dict.keys(),committers_dict.values(),'r',label='Committer')
    contribution_line = chart.plot(contributions_dict.keys(),contributions_dict.values(),'b--',label='Contribution')
    years = list(range(first_year,2017))
    chart.xticks(years)

    # Legend
    chart.legend()

    # Show/Save
    chart.savefig(images_path + file_name.replace('.txt','-commiter-contribution.eps'), format='eps')
    chart.show()

2 个答案:

答案 0 :(得分:1)

Matplotlib正在使用正确的数字,但是用科学记数法表示,因为在x轴上没有更多空间来放置更多东西。也就是说,您可以直接与x轴交互,并使用旋转值在什么位置说明您想要的字符串。以下示例(数据随机化):

group = {}

words = ['mom', 'dad', 'aaa', 'bob', 'ccc', 'xyz', 'abc']

for w in words:
    h = eq_hash(w)
    group[h] = group.get(h, []) + [w]

print group.values()
# [['xyz', 'abc'], ['mom', 'dad', 'bob'], ['aaa', 'ccc']]

,结果:

lots of dates in x axis

,这有点混乱所以给你一个步骤"标签代码"范围:

import matplotlib.pyplot as chart
from matplotlib import lines
import random

title = 'Title'
first_year = 1960
last_year = 2017
x = [year for year in range(first_year,2017)]
y1 = [random.randint(0,10) for year in range(first_year,2017)]
y2 = [random.randint(0,10) for year in range(first_year,2017)]
highest_value = max(y1+y2)

# Settings
chart.title(title)
chart.xlabel('Years')
chart.ylabel('Committers/Contributions')
chart.ylim([0,highest_value + 0.05*highest_value])
chart.xlim(first_year,last_year)

# Values
committer_line = chart.plot(x,y1,'r',label='Committer')
contribution_line = chart.plot(x,y2,'b--',label='Contribution')
years = list(range(first_year,last_year))
years_str = [str(i) for i in range(first_year,last_year)]
chart.xticks(years,years_str,rotation=45)

# Legend
chart.legend()

# Show/Save
#chart.savefig(images_path + file_name.replace('.txt','-commiter-contribution.eps'), format='eps')
chart.show()

,将缓解x轴信息:

a few dates on the x axis

答案 1 :(得分:1)

如果您查看右下角,您会看到matplotlib只是更改了xtick标签的显示,以使用科学记数法来节省空间。要更改此设置,您需要更改刻度标签var data = { objectId: 1 }; $http({ method: 'POST', url: myUrl, data: data }).success(function() { //stuff });

要禁用此转换为科学计数法,您可以调整默认格式化程序:

Formatter

这会编辑the useOffset parameter of your ScalarFormatter

如果您希望默认禁用此行为,则可以编辑ax.get_xaxis().get_major_formatter().set_useOffset(False) rcparam。