【问题标题】:Python matplotlib y axis is not working properly [duplicate]Python matplotlib y轴无法正常工作[重复]
【发布时间】:2023-03-30 10:19:01
【问题描述】:

我的 y 轴有问题。在我将过多的数字放入轴功能之前,它工作正常。这是代码。

import matplotlib.pyplot as plt
plt.style.available

input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]

x_values = range(1, 1001)
y_values = [x**2 for x in x_values]

plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.scatter(x_values, y_values, s=100, c=y_values, cmap=plt.cm.Blues)

ax.set_title("Kwadraty liczb", fontsize=24)
ax.set_xlabel("Wartość", fontsize=14)
ax.set_ylabel("Kwadraty wartości", fontsize=14)


ax.axis([0, 1100, 0, 1100000])

plt.show()

当我试图弄清楚为什么它不起作用时,我在 ax.axis 的 ymax 中输入了不同的值,例如它适用于 ax.axis([0, 1100, 0 , 10000]) 但是当我想得到1100000 发生这种情况https://i.stack.imgur.com/6gSOE.png

【问题讨论】:

  • 您可以编辑您的帖子并包含您获得的结果的图像吗?这对我来说似乎很好用
  • 嗨 Lukasz,我试过你的脚本,看起来不错。你有什么问题?
  • 我在添加照片时遇到了问题,所以我会留下一个链接。正如您在图片上看到的,y 轴上的值与预期值完全不同。
  • 我觉得这个确切的问题是在一周前提出的。您只需添加ax.ticklabel_format(style='plain')。不需要自定义对象。

标签: python matplotlib


【解决方案1】:

如果您的意思是 y 轴刻度标签自动除以一百万(由刻度标签上方的“1e6”表示),您可以通过创建自定义 ScalarFormatter 对象并关闭科学计数法来进行配置。有关详细信息,请参阅 matplotlib 文档页面 on tick formatters 和 on ScalarFormatter。

import matplotlib.pyplot as plt
from matplotlib import ticker
plt.style.available

input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]

x_values = range(1, 1001)
y_values = [x**2 for x in x_values]

plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.scatter(x_values, y_values, s=100, c=y_values, cmap=plt.cm.Blues)

ax.set_title("Kwadraty liczb", fontsize=24)
ax.set_xlabel("Wartość", fontsize=14)
ax.set_ylabel("Kwadraty wartości", fontsize=14)

ax.axis([0, 1100, 0, 1100000])

formatter = ticker.ScalarFormatter()
formatter.set_scientific(False)
ax.yaxis.set_major_formatter(formatter)

plt.show()

请注意,我添加了一个新的导入语句 (from matplotlib import ticker) 和上面的三行 plt.show()。如果您希望它也适用于 x 轴(以防您放大此轴),只需添加类似的代码行:ax.xaxis.set_major_formatter(formatter)。

【讨论】:

    【解决方案2】:

    虽然您可以按照 luuk 的建议完成创建自定义 ScalarFormatter 对象的所有额外步骤,但您可以通过简单地配置 ax.ticklabel_format(style='plain') 已经提供的内容来实现相同的目的:

    import matplotlib.pyplot as plt
    #plt.style.available
    
    input_values = [1, 2, 3, 4, 5]
    squares = [1, 4, 9, 16, 25]
    
    x_values = range(1, 1001)
    y_values = [x**2 for x in x_values]
    
    plt.style.use('seaborn')
    fig, ax = plt.subplots()
    ax.ticklabel_format(style='plain')
    
    ax.scatter(x_values, y_values, s=100, c=y_values,cmap=plt.cm.Blues)
    
    ax.set_title("Kwadraty liczb", fontsize=24)
    ax.set_xlabel("Wartość", fontsize=14)
    ax.set_ylabel("Kwadraty wartości", fontsize=14)
    
    ax.axis([0, 1100, 0, 1100000])
    
    plt.show()
    

    仍会产生所需的相同图表

    另外,你会注意到我注释掉了plt.style.available,因为它没用,被plt.style.use('seaborn') 覆盖。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 2021-10-04
      • 2019-12-02
      • 2018-06-13
      • 2018-11-11
      • 2018-11-11
      • 2021-07-09
      相关资源
      最近更新 更多