先找到自己的python位置,再进入Scripts文件夹,我的是C:\Users\mi\AppData\Local\Programs\Python\Python39\Scripts
一定要找对!否则下面的命令没有任何反应
以管理员身份打开cmd,用pip install --upgrade pip
命令升级pip
若升级失败(没用管理员身份),回到上一级python39文件夹,用这个命令python -m ensurepip
,然后python -m pip install --upgrade pip
重新升级一下。
然后用python -m pip install matplotlib
这个命令安装。
打开pycharm,点击File - Settings - Project: Python(我这里是Project: Lagrange) - Project Interpreter,检查是否安装成功。
使用import matplotlib
,如果没报错即可正常使用。
如果还是报错,大概是因为从国外下载,修改下载源即可解决。
贴心复制清华大学:https://pypi.tuna.tsinghua.edu.cn/simple/
先举一个简单的小例子,是用线性插值拟合绘图。代码样例:
# 导入库
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
from scipy.optimize import leastsq
# 多项式函数
# np.polyld([c1,c0])函数用于生成多项式函数c1x^1+c0x^0
def fit_func(p, x):
f = np.poly1d(p)
return f(x)
# 残差函数
def error_func(p, x, y):
err = fit_func(p, x) - y
return err
# 需要使用numpy.array()将样本数据(xi,yi)转换成数组形式
x_data = np.array([1.51, 1.64, 1.6, 1.73, 1.82, 1.87]) # 创建x列表存储数据的x值
y_data = np.array([1.63, 1.7, 1.71, 1.72, 1.76, 1.86]) # 创建y列表存储数据的y值
x_predict = np.arange(1.5, 2, 0.1) # 预测区间
# 使用最小二乘函数求解参数
# leastsq()函数位于Scipy的optimize模块中,利用leastsq()函数可以对数据进行拟合。
# 参数residuals_func表示误差函数
# 参数p_init表示初始c0、c1
# 数据点
p_init = np.random.randn(2) # 生成2个随机数,作为各项系数的初始值,用于迭代修正
plsq = leastsq(error_func, p_init, args=(x_data, y_data))
# leastsq返回的是一个元组,元组的第一个元素是多项式系数数组
print("[c0,c1] = ", end='')
print(plsq[0])
# 绘制图像
plt.scatter(x_data, y_data, label="样本点", color="black", zorder=2)
plt.plot(x_predict, fit_func(plsq[0], x_predict), label="拟合结果", color="red", zorder=1)
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
plt.title("父亲身高(x)与孩子身高(y)数据集")
plt.legend(loc="upper left")
plt.show()
Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
Matplotlib 通常与 NumPy 和 SciPy(Scientific Python)一起使用, 这种组合广泛用于替代 MatLab
Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API。
可以使用 import 导入 pyplot 库,并设置一个别名 plt:
import matplotlib.pyplot as plt
绘制好之后要使用plt.show()
语句可以显示该语句上面的所有操作(上面写了几个图,就一次性显示几个图),而下面的操作则需要再写一个show()去显示。
首先需要知道几个重要的字符使用: (使用时需要加引号)
字符 | 颜色 |
---|---|
b | 蓝色 |
m | 洋红色 |
g | 绿色 |
y | 黄色 |
r | 红色 |
k | 黑色 |
w | 白色 |
c | 青绿色 |
#008000 | RGB 颜色符串 |
SeaGreen | 颜色名 |
其他颜色可以参考:HTML 颜色值
类型 | 简写字符 | 线型 |
---|---|---|
solid(默认) | ‐ | 实线 |
dashed | ‐‐ | 破折线 |
dashdot | ‐. | 点划线 |
dotted | : | 虚线 |
字符 | 标记 |
---|---|
. | 点标记 |
, | 像素标记(极小点) |
o | 实心圈标记 |
v | 倒三角标记 |
^ | 上三角标记 |
> | 右三角标记 |
< | 左三角标记 |
1 | 下三叉 |
2 | 上三叉 |
3 | 左三叉 |
4 | 右三叉 |
8 | 八角形 |
s | 正方形 |
p | 五边形 |
P | 加号(填充) |
* | 星号 |
h | 六边形 1 |
H | 六边形 2 |
+ | 加号 |
x | 乘号 x |
X | 乘号 x (填充) |
D | 菱形 |
d | 瘦菱形 |
(这里写不出来,就是竖线符号) | 竖线 |
_ | 横线 |
markers.0 (markers.TICKLEFT) | 左横线 |
markers.1 (markers.TICKRIGHT) | 右横线 |
markers.2 (markers.TICKUP) | 上竖线 |
markers.3 (markers.TICKDOWN) | 下竖线 |
markers.4 (markers.CARETLEFT) | 左箭头 |
markers.5 (markers.CARETRIGHT) | 右箭头 |
markers.6 (markers.CARETUP) | 上箭头 |
markers.7 (markers.CARETDOWN) | 下箭头 |
markers.8 (markers.CARETLEFTBASE) | 左箭头 (中间点为基准) |
markers.9 (markers.CARETRIGHTBASE) | 右箭头 (中间点为基准) |
markers.10 (markers.CARETUPBASE) | 上箭头 (中间点为基准) |
markers.11 (markers.CARETDOWNBASE) | 下箭头 (中间点为基准) |
“None” 、" "、 “” | 没有任何标记 |
$ … $(注意:中间没有空格) | 渲染指定的字符。例如 " $ f $ " 以字母 f 为标记。 |
import matplotlib.pyplot as plt
import numpy as np
"""
语法:
# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
参数说明:
x, y:点或线的节点,x 为 x 轴数据,y 为 y 轴数据,数据可以是列表或数组。
fmt:可选,定义基本格式(如颜色、标记和线条样式)。(后面会讲)
**kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度等。(后面会讲)
"""
xpoints = np.array([1, 8, 9])
ypoints = np.array([3, 10, 30]) # 必须确保x和y的数量相同
plt.plot(xpoints, ypoints) # 使用默认样式(直线)
plt.show()
plt.plot(xpoints, ypoints, 'o') # 不想要线,只需要描点(实心圈的标记)
plt.show()
plt.plot(ypoints) # 如果不指定x轴上的点,则x会根据y的值来设置
plt.show()
# 当x间隔足够小时(如0.1),可以绘制出曲线
x = np.arange(0, 4*np.pi, 0.1) # start,stop,step
y = np.sin(x) # 两个周期的正弦
z = np.cos(x) # 两个周期的余弦
plt.plot(x, y, x, z) # 绘制两条曲线在同一个图像中
plt.show()
fmt参数定义了基本格式,如标记、线条样式和颜色。
fmt = '[marker][line][color]'
,fmt可以理解为是三种格式的简单集合,我们既可以一次性指定三种属性如plt.plot(ypoints, 'o:r')
,也可以不适用fmt参数,而是单独使用后面的三个参数如plt.plot(ypoints, marker='o')
、plt.plot(ypoints, linestyle = 'dotted')
来指定某种格式。(设置绘图样式可查询本章中的表格)
绘图标记marker
marker参数表示绘图标记,此外,还有一些额外的参数可以设置标记。
ms = 20
绘图线linestyle
绘图过程如果我们自定义线的样式,包括线的类型、颜色和大小等。
linestyle
参数来定义,简写为ls
。color
参数来定义,简写为c
。linewidth
参数来定义,简写为lw
,值可以是浮点数。使用xlabel()
和ylabel()
方法来设置 x 轴和 y 轴的标签;使用title()
方法来设置标题。
标签和标题的定位:
title()
方法提供了loc
参数来设置标题显示的位置,可以设置为: 'left'
, 'right'
,和'center'
,默认值为'center'
。xlabel()
方法提供了loc
参数来设置 x 轴显示的位置,可以设置为: 'left'
, 'right'
,和'center'
,默认值为'center'
。ylabel()
方法提供了loc
参数来设置 y 轴显示的位置,可以设置为: 'left'
, 'right'
,和'center'
,默认值为'center'
。import numpy as np
import matplotlib.pyplot as plt
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.plot(x, y)
plt.title("RUNOOB TEST TITLE") # 设置标题
plt.xlabel("x - label") # x轴的轴标签
plt.ylabel("y - label") # y轴的轴标签
plt.show()
设置字体
Matplotlib默认情况不支持中文,需要额外设置字体。使用fontproperties
参数设置字体的中文显示,使用fontsize
或size
设置字体大小,使用fontdict
可以用css来设置字体样式。
若使用自己下载的字体,需要将字体文件放在当前执行的代码文件中。
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
# 自定义字体
'''
# fname 为你下载的字体库路径(此处以SourceHanSansSC-Bold.otf字体文件为例)
font1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf", size=20)
'''
# 使用系统字体
"""
查看系统支持的字体:
a = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])
for i in a:
print(i)
在输出中找到要用的字体,如STFangsong
"""
plt.rcParams['font.family'] = ['STFangsong'] # 将字体添加到plt中
x = np.arange(1, 11)
y = 2 * x + 5
font1 = {'color': 'blue', 'size': 20} #使用CSS设置字体样式
# fontproperties设置中文显示,fontsize或size设置字体大小,fontdict设置字体样式
plt.title("标题", fontdict=font1)
plt.xlabel("x轴", fontproperties='STFangsong', fontsize=18)
plt.ylabel("y轴", fontproperties='STFangsong', size=18)
plt.plot(x, y)
plt.show()
可以使用pyplot中的grid()
方法来设置图表中的网格线。
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
'''
matplotlib.pyplot.grid(b=None, which='major', axis='both', )
参数说明:
b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
which:可选,可选值有 'major'、'minor' 和 'both',默认为 'major',表示应用更改的网格线。
axis:可选,设置显示哪个方向的网格线,可以是取 'both'(默认),'x' 或 'y',分别表示两个方向,x 轴方向或 y 轴方向。
**kwargs:可选,设置网格样式,可以是 color='r', linestyle='-' 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
'''
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.title("RUNOOB grid() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y)
plt.grid(color='r', linestyle='--', linewidth=0.5)
plt.show()
可以使用pyplot中的subplot()
和subplots()
方法来绘制多个子图。subplot()
方法在绘图时需要指定位置,subplots()
方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。
subplot():
subplot(nrows, ncols, index, **kwargs)
subplot函数将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右、从上到下对每个子区域进行编号1…N,左上的子区域的编号为 1、右下的区域编号为N,index参数表示下面要绘制的子图的编号。
例如设置 numRows = 2,numCols = 2,就是将图表绘制成 2x2 的图片区域, 对应的编号为:
例:
import matplotlib.pyplot as plt
import numpy as np
# plot 1:
x = np.array([0, 6])
y = np.array([0, 100])
plt.subplot(2, 2, 1)
plt.plot(x, y) # 子图的绘制方法像大图一样,就是上面用subplot指定了位置而已
plt.title("plot 1")
# plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.subplot(2, 2, 2)
plt.plot(x, y)
plt.title("plot 2")
# plot 3:
x = np.array([1, 2, 3, 4])
y = np.array([3, 5, 7, 9])
plt.subplot(2, 2, 3)
plt.plot(x, y)
plt.title("plot 3")
# plot 4:
x = np.array([1, 2, 3, 4])
y = np.array([4, 5, 6, 7])
plt.subplot(2, 2, 4)
plt.plot(x, y)
plt.title("plot 4")
plt.suptitle("RUNOOB subplot Test") # 设置标题
plt.show()
import matplotlib.pyplot as plt
import numpy as np
"""
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
参数说明:
nrows:默认为 1,设置图表的行数。
ncols:默认为 1,设置图表的列数。
sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 'none'、'all'、'row' 或 'col'。
False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 'all' 所有子图共享 x 轴或 y 轴;
'row' 设置每个子图行共享一个 x 轴或 y 轴,'col' 设置每个子图列共享一个 x 轴或 y 轴。
squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N*1 或 1*N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。
如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。
subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
**fig_kw:把详细的关键字参数传给 figure() 函数。
"""
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
# subplots初步了解
fig, ax = plt.subplots() # 返回一个元组,第二个元素ax是matplotlib.axes._subplots.AxesSubplot类型
ax.plot(x, y) # matplotlib.axes._subplots.AxesSubplot也有plot方法?
ax.set_title('Simple plot') # 设置标题的方法
plt.show()
# 共享y轴的两个子图
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True) # 每个子图都有名字
ax1.plot(x, y)
ax1.set_title('Sharing Y axis') # 给子图设置标题
ax2.scatter(x, y) # scatter方法用来描点,后面会讲
plt.show()
# 创建四个子图
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar")) # 子图也可以用坐标
# subplot_kw=dict(projection="polar") 应该是用来设置坐标轴,具体情况暂时不研究了
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)
plt.show()
# 每个列共享x轴
plt.subplots(2, 2, sharex='col')
# 每个行共享y轴
plt.subplots(2, 2, sharey='row')
# 每个列共享x轴且每个行共享y轴
plt.subplots(2, 2, sharex='all', sharey='all')
# 同上
plt.subplots(2, 2, sharex=True, sharey=True)
plt.show()
# 创建标识(左上角窗口编号)为10的图,已经存在的则删除
fig, ax = plt.subplots(num=10, clear=True) # num和clear参数之前没见过
plt.show()
scatter()
方法来绘制散点图。
import matplotlib.pyplot as plt
import numpy as np
"""
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None,
linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
参数说明:
x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。
s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
c:点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。
marker:点的样式,默认小圆圈 'o'。
cmap:Colormap,选择颜色条,Matplotlib 模块提供了很多可用的颜色条,其中每种颜色(color)都有一个范围从0到100的值。
如果要在图中显示颜色条,需要使用plt.colorbar()方法。颜色条的名称见附录。
norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
vmin,vmax:亮度设置,在 norm 参数存在时会忽略。
alpha:透明度设置,0-1 之间,默认 None,即不透明。
linewidths:标记点的长度。
edgecolors:颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。
plotnonfinite:布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
**kwargs:其他参数。
"""
# 自定义大小和颜色
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90])
colors = np.array(["red", "green", "black", "orange", "purple", "beige", "cyan", "magenta"])
plt.scatter(x, y, s=sizes, c=colors)
plt.show()
# 设置两组散点图
x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
plt.scatter(x, y, color='hotpink')
x = np.array([2, 2, 8, 1, 15, 8, 12, 9, 7, 3, 11, 4, 7, 14, 12])
y = np.array([100, 105, 84, 105, 90, 99, 90, 95, 94, 100, 79, 112, 91, 80, 85])
plt.scatter(x, y, color='#88c999')
plt.title("RUNOOB Scatter Test") # 设置标题
plt.show()
使用pyplot中的bar()
方法来绘制柱形图。
import matplotlib.pyplot as plt
import numpy as np
"""
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
参数说明:
x:浮点型数组,柱形图的 x 轴数据。
height:浮点型数组,柱形图的高度。
width:浮点型数组,柱形图的宽度。
bottom:浮点型数组,底座的 y 坐标,默认 0。
align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。
'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。
**kwargs::其他参数。
"""
# 简单使用
x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])
plt.bar(x, y)
plt.show()
# 垂直方向的柱形图可以使用barh()方法来设置
plt.barh(x, y)
plt.show()
# bar()方法使用width设置宽度,barh()方法使用height设置
# 参数color = "#4CAF50" 设置颜色
# color = ["#4CAF50","red","hotpink","#556B2F"] 自定义各个柱形的颜色
使用pyplot中的pie()
方法来绘制饼图。
import matplotlib.pyplot as plt
import numpy as np
"""
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False,
labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None,
center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]
参数说明:
x:浮点型数组,表示每个扇形的面积。
explode:数组,表示各个扇形之间的间隔,默认值为0。
labels:列表,各个扇形的标签,默认值为 None。
colors:数组,表示各个扇形的颜色,默认值为 None。
autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
radius::设置饼图的半径,默认为 1。
startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={'linewidth':5} 设置 wedge 线宽为5。
textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
"""
# 简单使用
y = np.array([35, 25, 25, 15])
plt.pie(y,
labels=['A', 'B', 'C', 'D'], # 设置饼图标签
colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远
autopct='%.2f%%', # 格式化输出百分比
)
plt.title("RUNOOB Pie Test")
plt.show()
颜色条
颜色名称 | 保留关键字 |
---|---|
Accent | Accent_r |
Blues | Blues_r |
BrBG | BrBG_r |
BuGn | BuGn_r |
BuPu | BuPu_r |
CMRmap | CMRmap_r |
Dark2 | Dark2_r |
GnBu | GnBu_r |
Greens | Greens_r |
Greys | Greys_r |
OrRd | OrRd_r |
Oranges | Oranges_r |
PRGn | PRGn_r |
Paired | Paired_r |
Pastel1 | Pastel1_r |
Pastel2 | Pastel2_r |
PiYG | PiYG_r |
PuBu | PuBu_r |
PuBuGn | PuBuGn_r |
PuOr | PuOr_r |
PuRd | PuRd_r |
Purples | Purples_r |
RdBu | RdBu_r |
RdGy | RdGy_r |
RdPu | RdPu_r |
RdYlBu | RdYlBu_r |
RdYlGn | RdYlGn_r |
Reds | Reds_r |
Set1 | Set1_r |
Set2 | Set2_r |
Set3 | Set3_r |
Spectral | Spectral_r |
Wistia | Wistia_r |
YlGn | YlGn_r |
YlGnBu | YlGnBu_r |
YlOrBr | YlOrBr_r |
YlOrRd | YlOrRd_r |
afmhot | afmhot_r |
autumn | autumn_r |
binary | binary_r |
bone | bone_r |
brg | brg_r |
bwr | bwr_r |
cividis | cividis_r |
cool | cool_r |
coolwarm | coolwarm_r |
copper | copper_r |
cubehelix | cubehelix_r |
flag | flag_r |
gist_earth | gist_earth_r |
gist_gray | gist_gray_r |
gist_heat | gist_heat_r |
gist_ncar | gist_ncar_r |
gist_rainbow | gist_rainbow_r |
gist_stern | gist_stern_r |
gist_yarg | gist_yarg_r |
gnuplot | gnuplot_r |
gnuplot2 | gnuplot2_r |
gray | gray_r |
hot | hot_r |
hsv | hsv_r |
inferno | inferno_r |
jet | jet_r |
magma | magma_r |
nipy_spectral | nipy_spectral_r |
ocean | ocean_r |
pink | pink_r |
plasma | plasma_r |
prism | prism_r |
rainbow | rainbow_r |
seismic | seismic_r |
spring | spring_r |
summer | summer_r |
tab10 | tab10_r |
tab20 | tab20_r |
tab20b | tab20b_r |
tab20c | tab20c_r |
terrain | terrain_r |
twilight | twilight_r |
twilight_shifted | twilight_shifted_r |
viridis | viridis_r |
winter | winter_r |
参考来源:
在Pycharm中安装matplotlib
Matplotlib安装
在Pycharm中安装matplotlib
pip install XXX总是报错,例如:Exception: Traceback (most recent call last):这种错误怎么办?