plt

plt.yscale()

该方法用于对y轴进行放缩,从而使得不同量级的y轴取值可以在同一副图中较为清晰的展现。

下面以plt.yscale('log')为例。

在不做放缩情况下,画出的图如下:

进行缩放后形如:

这里是以10为底进行的y轴数值变换。变换后y值应该是在0到6之间。但我们可以看到上图纵坐标在显示上再次通过以10为底的指数进行了还原。但图形依旧是以经过对数变换之后的数值来绘制的。

sns.color_palette()

这个函数可以生成一个array,每个元素代表一个颜色坐标

词云图

输入为字符串

1
2
3
4
5
from wordcloud import WordCloud
cloud = WordCloud(width=1440, height=1080).generate(str)
plt.figure(figsize=(20, 15))
plt.imshow(cloud)
plt.axis('off')

series画图

1
2
pd.Series.plot.bar()
pd.Series.plot.hist()

plt.ion()

开启交互模式。开启后继续运行相关绘图语句会出现反应。不然会无反应。

以下代码会在图上加标题。

1
2
3
4
plt.ion()
plt.plot([1.6,2.7])
plt.show()
plt.title('test')

以下代码不会在图上加标题,默认是交互模式关闭。

1
2
3
4
plt.ioff()
plt.plot([1.6,2.7])
plt.show()
plt.title('test')

figure subplot ax的含义

figure是图像

subplot是子图

ax是画布?

移除曲线

1
line_name.pop(0).remove()

名称太长无法在图中完整显示

1
plt.tight_layout()

matplotlib 中文乱码问题

网上有些比较直接的解决方法,比如 python matplotlib 中文显示参数设置,然而我试了没用。

这些不管用的方法主要有两种:

  1. 每次编写代码时进行参数设置
1
2
3
4
#coding:utf-8
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
  1. 修改matplotlib配置文件
1
2
import matplotlib
matplotlib.matplotlib_fname() #将会获得matplotlib包所在文件夹

然后进入文件夹(path\to\matplotlib\mpl-data)该文件夹下就能看到matplotlibrc配置文件。

1)打开该配置文件,找到下面这行:

#font.serif : Bitstream Vera Serif, New Century Schoolbook, Century Schoolbook L, Utopia, ITC Bookman, Bookman, Nimbus Roman No9 L, Times New Roman, Times, Palatino, Charter, serif
然后,将前面的注释去掉!

2)找中文字体放到matplotlib字体库中。

ubuntu下通过fc-list :lang=zh 查看中文字体路径,注意:前有空格。随便选一个复制到path\to\matplotlib\mpl-data\fonts\ttf文件夹下,命名为Vera.ttf

注明:这一步的作用其实就是将matplotlib中一个默认的字体替换为我们复制过来的中文字体,将这个中文字体命名改为matplotlib中有的字体名。

我也查了一些应对方法,比如Matplotlib cannot find basic fonts,然而依旧不管用。

这些修复方法也有两种:

  1. 1
    2
    3
    4
    Stopping Jupyter
    Installing font-manager: sudo apt install font-manager
    Cleaning the matplotlib cache directory: rm ~/.cache/matplotlib -fr
    Restarting Jupyter.
1
sudo apt-get install msttcorefonts -qq

最终我找到在代码中指定字体配置的方法解决了这个问题。利用fontproperties进行字体指定,但是这样做的坏处是每一句和画图有关牵涉到中文的都得指定下,不能全局一次性解决。

1
2
3
4
5
6
7
8
9
10
11
12
#coding:utf-8  
import matplotlib
matplotlib.use('qt4agg')
from matplotlib.font_manager import *
import matplotlib.pyplot as plt
#定义自定义字体,文件名从1.b查看系统中文字体中来
myfont = FontProperties(fname='/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc')
#解决负号'-'显示为方块的问题
matplotlib.rcParams['axes.unicode_minus']=False
plt.plot([-1,2,-5,3])
plt.title(u'中文',fontproperties=myfont)
plt.show()