【问题标题】:matplotlib: Setting both major and minor ticks forces same x and y scalematplotlib:设置主要和次要刻度会强制使用相同的 x 和 y 比例
【发布时间】:2014-07-25 20:08:31
【问题描述】:

这个问题与我之前提出的“matplotlib: Change grid interval and specify tick labels”问题有关,但现在我想更改 x 和 y 轴的比例。当我设置 x 和 y 轴的范围,然后指定主要和次要刻度的间隔时,它会强制 x 和 y 轴相同。

这是我的代码。

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

for key, value in sorted(data.items()):
    x = value[0][2]
    y = value[0][3]
    count = value[0][4]

    ax.annotate(count, xy = (x, y), size = 3)

plt.suptitle('Number of counts', fontsize = 12)

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')

# I want max x axis to be 500
ax.set_xlim(0, 501)
# I want max y axis to be 300
ax.set_ylim(0, 301)

# I want major ticks to be every 20
major_ticks = np.arange(0, 501, 20)

# I want minor ticks to be every 5
minor_ticks = np.arange(0, 501, 5)
# If I do minor_ticks = np.arange(0, 301, 5), I will not get minor ticks for the entire plot

# Specify tick label size
ax.tick_params(axis = 'both', which = 'major', labelsize = 4)
ax.tick_params(axis = 'both', which = 'minor', labelsize = 0)
# Suppress minor tick labels

ax.set_xticks(major_ticks)
ax.set_xticks(minor_ticks, minor = True)
ax.set_yticks(major_ticks)
ax.set_yticks(minor_ticks, minor = True)

# Set both ticks to be outside
ax.tick_params(which = 'both', direction = 'out')

# Specify different settings for major and minor grids
ax.grid(which = 'minor', alpha = 0.3)
ax.grid(which = 'major', alpha = 0.7)

filename = 'C:\Users\Owl\Desktop\Plot.png'
plt.savefig(filename, dpi = 150)
plt.close()

这就是我得到的。

我怎样才能得到 x 和 y 轴的不同范围并且仍然有这样的主要和次要刻度?我可能遗漏了一些非常简单的东西,但如果有人能指出,我非常感谢!

【问题讨论】:

  • 您的评论说您希望 x 轴限制为 500,但您实际上将其设置为 301。
  • 谢谢,我刚刚编辑了它。那是一个错字!
  • suptitle 真的在你的代码中有效吗?

标签: python matplotlib grid scale axis


【解决方案1】:

我更新了我的代码如下,现在我得到了我想要的!谢谢!

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

for key, value in sorted(data.items()):
    x = value[0][2]
    y = value[0][3]
    count = value[0][4]

    ax.annotate(count, xy = (x, y), size = 3)

plt.suptitle('Number of counts', fontsize = 12)

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_aspect('equal')

# I want max x axis to be 500
ax.set_xlim(0, 501)
# I want max y axis to be 300
ax.set_ylim(0, 301)

# Set major ticks for x axis
major_xticks = np.arange(0, 501, 20)

# Set major ticks for y axis
major_yticks = np.arange(0, 301, 20)

# I want minor ticks for x axis
minor_xticks = np.arange(0, 501, 5)

# I want minor ticks for y axis
minor_yticks = np.arange(0, 301, 5)

# Specify tick label size
ax.tick_params(axis = 'both', which = 'major', labelsize = 6)
ax.tick_params(axis = 'both', which = 'minor', labelsize = 0)
# Suppress minor tick labels

ax.set_xticks(major_xticks)
ax.set_xticks(minor_yticks, minor = True)

ax.set_yticks(major_xticks)
ax.set_yticks(minor_yticks, minor = True)

# Set both ticks to be outside
ax.tick_params(which = 'both', direction = 'out')

# Specify different settings for major and minor grids
ax.grid(which = 'minor', alpha = 0.3)
ax.grid(which = 'major', alpha = 0.7)

filename = 'C:\Users\Owl\Desktop\Plot.png'
plt.savefig(filename, dpi = 150)
plt.close()

【讨论】:

    【解决方案2】:

    那是因为您将 x 和 y 刻度设置为相同的值。如果您想要不同的尺寸,那么您还需要不同的刻度。您不能将两组刻度设置为相同的major_ticks 位置。为 x 轴制作一个刻度位置列表,为 y 轴制作一个单独的刻度位置列表,然后将每个轴的刻度设置到相应的列表中。

    【讨论】:

    • 谢谢!我分别设置它们并让它工作!我将在下面发布我的代码供您参考!
    猜你喜欢
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    • 2017-08-08
    • 2012-10-08
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多