matplotlib 同时设置主刻度和次刻度将强制使用相同的x和y刻度

bxjv4tth  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(137)

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

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig = plt.figure()
  4. ax = fig.add_subplot(111)
  5. for key, value in sorted(data.items()):
  6. x = value[0][2]
  7. y = value[0][3]
  8. count = value[0][4]
  9. ax.annotate(count, xy = (x, y), size = 3)
  10. plt.suptitle('Number of counts', fontsize = 12)
  11. ax.set_xlabel('x')
  12. ax.set_ylabel('y')
  13. ax.set_aspect('equal')
  14. # I want max x axis to be 500
  15. ax.set_xlim(0, 501)
  16. # I want max y axis to be 300
  17. ax.set_ylim(0, 301)
  18. # I want major ticks to be every 20
  19. major_ticks = np.arange(0, 501, 20)
  20. # I want minor ticks to be every 5
  21. minor_ticks = np.arange(0, 501, 5)
  22. # If I do minor_ticks = np.arange(0, 301, 5), I will not get minor ticks for the entire plot
  23. # Specify tick label size
  24. ax.tick_params(axis = 'both', which = 'major', labelsize = 4)
  25. ax.tick_params(axis = 'both', which = 'minor', labelsize = 0)
  26. # Suppress minor tick labels
  27. ax.set_xticks(major_ticks)
  28. ax.set_xticks(minor_ticks, minor = True)
  29. ax.set_yticks(major_ticks)
  30. ax.set_yticks(minor_ticks, minor = True)
  31. # Set both ticks to be outside
  32. ax.tick_params(which = 'both', direction = 'out')
  33. # Specify different settings for major and minor grids
  34. ax.grid(which = 'minor', alpha = 0.3)
  35. ax.grid(which = 'major', alpha = 0.7)
  36. filename = 'C:\Users\Owl\Desktop\Plot.png'
  37. plt.savefig(filename, dpi = 150)
  38. plt.close()

这就是我得到的

我怎么能得到不同的范围为x和y轴,仍然有这样的主要和次要tick?我可能错过了一些非常简单的,但如果有人能指出它,我非常感谢!!

jchrr9hc

jchrr9hc1#

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

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. fig = plt.figure()
  4. ax = fig.add_subplot(111)
  5. for key, value in sorted(data.items()):
  6. x = value[0][2]
  7. y = value[0][3]
  8. count = value[0][4]
  9. ax.annotate(count, xy = (x, y), size = 3)
  10. plt.suptitle('Number of counts', fontsize = 12)
  11. ax.set_xlabel('x')
  12. ax.set_ylabel('y')
  13. ax.set_aspect('equal')
  14. # I want max x axis to be 500
  15. ax.set_xlim(0, 501)
  16. # I want max y axis to be 300
  17. ax.set_ylim(0, 301)
  18. # Set major ticks for x axis
  19. major_xticks = np.arange(0, 501, 20)
  20. # Set major ticks for y axis
  21. major_yticks = np.arange(0, 301, 20)
  22. # I want minor ticks for x axis
  23. minor_xticks = np.arange(0, 501, 5)
  24. # I want minor ticks for y axis
  25. minor_yticks = np.arange(0, 301, 5)
  26. # Specify tick label size
  27. ax.tick_params(axis = 'both', which = 'major', labelsize = 6)
  28. ax.tick_params(axis = 'both', which = 'minor', labelsize = 0)
  29. # Suppress minor tick labels
  30. ax.set_xticks(major_xticks)
  31. ax.set_xticks(minor_yticks, minor = True)
  32. ax.set_yticks(major_xticks)
  33. ax.set_yticks(minor_yticks, minor = True)
  34. # Set both ticks to be outside
  35. ax.tick_params(which = 'both', direction = 'out')
  36. # Specify different settings for major and minor grids
  37. ax.grid(which = 'minor', alpha = 0.3)
  38. ax.grid(which = 'major', alpha = 0.7)
  39. filename = 'C:\Users\Owl\Desktop\Plot.png'
  40. plt.savefig(filename, dpi = 150)
  41. plt.close()
展开查看全部
bwitn5fc

bwitn5fc2#

这是因为你把x轴和y轴的刻度设置成同一个东西。如果你想要不同的大小,那么你也需要不同的刻度。你不能把两组刻度设置成相同的major_ticks位置。为x轴制作一个刻度位置列表,为y轴制作一个单独的刻度位置列表,然后把每个轴的刻度设置成相应的列表。

相关问题