Sid*_*esh 15 python matplotlib
我正在使用 matplotlib 绘制折线图,每当我尝试绘制第二个折线图时,y 轴都会打印两次。
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4, 5]
y1 = ['1000', '13k', '26k', '42k', '60k', '81k']
y2 = ['1000', '13k', '27k', '43k', '63k', '85k']
plt.plot(x, y1)
plt.plot(x, y2, '-.')
plt.xlabel("X-axis data")
plt.ylabel("Y-axis data")
plt.title('multiple plots')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码,我做错了什么。
输出:
SiP*_*SiP 12
您的 y 值是字符串而不是数字,matplotlib 允许您绘制它们,但绘图没有“数字”比例,因此它只需在顶部添加新标签(如“85k”的字符串)。一个简单的修复方法是将所有字符串中的“k”替换为“e3”,然后使用 float() 将所有值转换为数字。
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4, 5]
y1 = ['1000', '13k', '26k', '42k', '60k', '81k']
y2 = ['1000', '13k', '27k', '43k', '63k', '85k']
Run Code Online (Sandbox Code Playgroud)
现在转换并绘制:
plt.plot(x, [float(i.replace('k', 'e3')) for i in y1])
plt.plot(x, [float(i.replace('k', 'e3')) for i in y2], '-.')
plt.xlabel("X-axis data")
plt.ylabel("Y-axis data")
plt.title('multiple plots')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这里我转换字符串只是为了绘图的目的。
更改两行:
y1 = ['1000', '13k', '26k', '42k', '60k', '81k']
y2 = ['1000', '13k', '27k', '43k', '63k', '85k']
Run Code Online (Sandbox Code Playgroud)
到
y1 = [1000, 13000, 26000, 42000, 60000, 81000]
y2 = [1000, 13000, 27000, 43000, 63000, 85000]
Run Code Online (Sandbox Code Playgroud)
它由两个变化组成。首先,plot不绘制字符串。其次,将“k”更改为 的倍数1000。
请尝试以下操作:
import matplotlib.pyplot as plt
x = [0, 1, 2, 3, 4, 5]
y1 = [1000, 13000, 26000, 42000, 60000, 81000]
y2 = [1000, 13000, 27000, 43000, 63000, 85000]
plt.plot(x, y1, label ='y1')
plt.plot(x, y2, '-.', label ='y2')
plt.xlabel("X-axis data")
plt.ylabel("Y-axis data")
plt.legend()
plt.title('multiple plots')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这也为线条添加了标签。
您使用的这段代码适用于单个图。在单图中,它将为图形绘制两条线。在一个代码语句中绘制不同的图。您可以使用:
fig,ax = plt.subplots(2)
然后使用:
ax[0].plot(x,y1)
ax[1].plot(x,y2)
或者如果您愿意,您可以将代码分成两个代码块。