Spine的放置演示

调整轴Spine的位置和外观。

  1. import numpy as np
  2. import matplotlib.pyplot as plt
  1. fig = plt.figure()
  2. x = np.linspace(-np.pi, np.pi, 100)
  3. y = 2 * np.sin(x)
  4. ax = fig.add_subplot(2, 2, 1)
  5. ax.set_title('centered spines')
  6. ax.plot(x, y)
  7. ax.spines['left'].set_position('center')
  8. ax.spines['right'].set_color('none')
  9. ax.spines['bottom'].set_position('center')
  10. ax.spines['top'].set_color('none')
  11. ax.spines['left'].set_smart_bounds(True)
  12. ax.spines['bottom'].set_smart_bounds(True)
  13. ax.xaxis.set_ticks_position('bottom')
  14. ax.yaxis.set_ticks_position('left')
  15. ax = fig.add_subplot(2, 2, 2)
  16. ax.set_title('zeroed spines')
  17. ax.plot(x, y)
  18. ax.spines['left'].set_position('zero')
  19. ax.spines['right'].set_color('none')
  20. ax.spines['bottom'].set_position('zero')
  21. ax.spines['top'].set_color('none')
  22. ax.spines['left'].set_smart_bounds(True)
  23. ax.spines['bottom'].set_smart_bounds(True)
  24. ax.xaxis.set_ticks_position('bottom')
  25. ax.yaxis.set_ticks_position('left')
  26. ax = fig.add_subplot(2, 2, 3)
  27. ax.set_title('spines at axes (0.6, 0.1)')
  28. ax.plot(x, y)
  29. ax.spines['left'].set_position(('axes', 0.6))
  30. ax.spines['right'].set_color('none')
  31. ax.spines['bottom'].set_position(('axes', 0.1))
  32. ax.spines['top'].set_color('none')
  33. ax.spines['left'].set_smart_bounds(True)
  34. ax.spines['bottom'].set_smart_bounds(True)
  35. ax.xaxis.set_ticks_position('bottom')
  36. ax.yaxis.set_ticks_position('left')
  37. ax = fig.add_subplot(2, 2, 4)
  38. ax.set_title('spines at data (1, 2)')
  39. ax.plot(x, y)
  40. ax.spines['left'].set_position(('data', 1))
  41. ax.spines['right'].set_color('none')
  42. ax.spines['bottom'].set_position(('data', 2))
  43. ax.spines['top'].set_color('none')
  44. ax.spines['left'].set_smart_bounds(True)
  45. ax.spines['bottom'].set_smart_bounds(True)
  46. ax.xaxis.set_ticks_position('bottom')
  47. ax.yaxis.set_ticks_position('left')

Spine的放置演示

定义一个调整轴Spine位置的方法

  1. def adjust_spines(ax, spines):
  2. for loc, spine in ax.spines.items():
  3. if loc in spines:
  4. spine.set_position(('outward', 10)) # outward by 10 points
  5. spine.set_smart_bounds(True)
  6. else:
  7. spine.set_color('none') # don't draw spine
  8. # turn off ticks where there is no spine
  9. if 'left' in spines:
  10. ax.yaxis.set_ticks_position('left')
  11. else:
  12. # no yaxis ticks
  13. ax.yaxis.set_ticks([])
  14. if 'bottom' in spines:
  15. ax.xaxis.set_ticks_position('bottom')
  16. else:
  17. # no xaxis ticks
  18. ax.xaxis.set_ticks([])

使用我们的新adjust_spines方法创建另一个图形。

  1. fig = plt.figure()
  2. x = np.linspace(0, 2 * np.pi, 100)
  3. y = 2 * np.sin(x)
  4. ax = fig.add_subplot(2, 2, 1)
  5. ax.plot(x, y, clip_on=False)
  6. adjust_spines(ax, ['left'])
  7. ax = fig.add_subplot(2, 2, 2)
  8. ax.plot(x, y, clip_on=False)
  9. adjust_spines(ax, [])
  10. ax = fig.add_subplot(2, 2, 3)
  11. ax.plot(x, y, clip_on=False)
  12. adjust_spines(ax, ['left', 'bottom'])
  13. ax = fig.add_subplot(2, 2, 4)
  14. ax.plot(x, y, clip_on=False)
  15. adjust_spines(ax, ['bottom'])
  16. plt.show()

Spine的放置演示2

下载这个示例