原文: https://pythonbasics.org/matplotlib-line-chart/

折线图使用 Matplotlib 开箱即用。 折线图中可以包含多条折线,更改颜色,更改折线类型等等。

Matplotlib 是用于绘图的 Python 模块。 折线图是它可以创建的多种图表类型之一。

折线图示例

折线图

首先导入matplotlibnumpy,它们对于制图非常有用。
您可以使用plot(x, y)方法创建折线图。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(-1, 1, 50)
  4. print(x)
  5. y = 2*x + 1
  6. plt.plot(x, y)
  7. plt.show()

Matplotlib 折线图 - 图1

曲线

plot()方法也适用于其他类型的折线图。 不需要是直线,y可以具有任何类型的值。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(-1, 1, 50)
  4. y = 2**x + 1
  5. plt.plot(x, y)
  6. plt.show()

Matplotlib 折线图 - 图2

下载示例

带有标签的直线

要知道您在看什么,您需要元数据。 标签是一种元数据。 它们显示图表的内容。 图表具有x标签,y标签和标题。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(-1, 1, 50)
  4. y1 = 2*x + 1
  5. y2 = 2**x + 1
  6. plt.figure()
  7. plt.plot(x, y1)
  8. plt.xlabel("I am x")
  9. plt.ylabel("I am y")
  10. plt.title("With Labels")
  11. plt.show()

Matplotlib 折线图 - 图3

多个直线

绘图中可以有多条线。 要添加另一行,只需再次调用plot(x, y)函数。 在下面的示例中,我们在图表上绘制了y(y1, y2)的两个不同值。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(-1, 1, 50)
  4. y1 = 2*x + 1
  5. y2 = 2**x + 1
  6. plt.figure(num = 3, figsize=(8, 5))
  7. plt.plot(x, y2)
  8. plt.plot(x, y1,
  9. color='red',
  10. linewidth=1.0,
  11. linestyle='--'
  12. )
  13. plt.show()

Matplotlib 折线图 - 图4

虚线

线可以是点的形式,如下图所示。 调用scatter(x, y)方法而不是调用plot(x, y)scatter(x, y)方法还可以用于(随机)将点绘制到图表上。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. n = 1024
  4. X = np.random.normal(0, 1, n)
  5. Y = np.random.normal(0, 1, n)
  6. T = np.arctan2(X, Y)
  7. plt.scatter(np.arange(5), np.arange(5))
  8. plt.xticks(())
  9. plt.yticks(())
  10. plt.show()

Matplotlib 折线图 - 图5

下载示例

直线刻度

您可以更改绘图上的刻度。 将它们设置在x轴,y轴上,甚至更改其颜色。 这条线可以更粗并且具有alpha值。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(-1, 1, 50)
  4. y = 2*x - 1
  5. plt.figure(figsize=(12, 8))
  6. plt.plot(x, y, color='r', linewidth=10.0, alpha=0.5)
  7. ax = plt.gca()
  8. ax.spines['right'].set_color('none')
  9. ax.spines['top'].set_color('none')
  10. ax.xaxis.set_ticks_position('bottom')
  11. ax.yaxis.set_ticks_position('left')
  12. ax.spines['bottom'].set_position(('data', 0))
  13. ax.spines['left'].set_position(('data', 0))
  14. for label in ax.get_xticklabels() + ax.get_yticklabels():
  15. label.set_fontsize(12)
  16. label.set_bbox(dict(facecolor='y', edgecolor='None', alpha=0.7))
  17. plt.show()

Matplotlib 折线图 - 图6

渐近线

可以将渐近线添加到该图。 为此,请使用plt.annotate()。 在下面的图中还有一条虚线。 您可以试一下代码以查看其工作原理。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(-1, 1, 50)
  4. y1 = 2*x + 1
  5. y2 = 2**x + 1
  6. plt.figure(figsize=(12, 8))
  7. plt.plot(x, y2)
  8. plt.plot(x, y1, color='red', linewidth=1.0, linestyle='--')
  9. ax = plt.gca()
  10. ax.spines['right'].set_color('none')
  11. ax.spines['top'].set_color('none')
  12. ax.xaxis.set_ticks_position('bottom')
  13. ax.yaxis.set_ticks_position('left')
  14. ax.spines['bottom'].set_position(('data', 0))
  15. ax.spines['left'].set_position(('data', 0))
  16. x0 = 1
  17. y0 = 2*x0 + 1
  18. plt.scatter(x0, y0, s = 66, color = 'b')
  19. plt.plot([x0, x0], [y0, 0], 'k-.', lw= 2.5)
  20. plt.annotate(r'$2x+1=%s$' %
  21. y0,
  22. xy=(x0, y0),
  23. xycoords='data',
  24. xytext=(+30, -30),
  25. textcoords='offset points',
  26. fontsize=16,
  27. arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')
  28. )
  29. plt.text(0, 3,
  30. r'$This\ is\ a\ good\ idea.\ \mu\ \sigma_i\ \alpha_t$',
  31. fontdict={'size':16,'color':'r'})
  32. plt.show()

Matplotlib 折线图 - 图7

带有文字刻度的直线

不一定是数字刻度。 秤也可以包含文字,例如以下示例。 在plt.yticks()中,我们只传递一个带有文本值的列表。 然后将这些值显示在y轴上。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. x = np.linspace(-1, 1, 50)
  4. y1 = 2*x + 1
  5. y2 = 2**x + 1
  6. plt.figure(num = 3, figsize=(8, 5))
  7. plt.plot(x, y2)
  8. plt.plot(x, y1,
  9. color='red',
  10. linewidth=1.0,
  11. linestyle='--'
  12. )
  13. plt.xlim((-1, 2))
  14. plt.ylim((1, 3))
  15. new_ticks = np.linspace(-1, 2, 5)
  16. plt.xticks(new_ticks)
  17. plt.yticks([-2, -1.8, -1, 1.22, 3],
  18. [r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$readly\ good$'])
  19. ax = plt.gca()
  20. ax.spines['right'].set_color('none')
  21. ax.spines['top'].set_color('none')
  22. ax.xaxis.set_ticks_position('bottom')
  23. ax.yaxis.set_ticks_position('left')
  24. ax.spines['bottom'].set_position(('data', 0))
  25. ax.spines['left'].set_position(('data', 0))
  26. plt.show()

Matplotlib 折线图 - 图8