饼状图

饼状图显示一个数据系列中各项的大小与各项总和的比例。Pyplot中绘制饼状图的函数为 pie(),主要参数如下:

  • x:饼图中每一块的比例,通常是一个数组。如果 sum(x) > 1 会使用归一化后的比例,即每一块除以sum(x),如果sum(x) < 1,则按照实际比例,此时有一部分为空白
  • explode:指定饼图中每块离开中心的距离,通常是一个数组,默认为0
  • labels:为饼图添加标签说明,类似于图例说明,标签列表
  • colors:指定饼图的填充色,颜色列表
  • autopct:设置饼图内每块百分比显示样式,可以使用format字符串或者格式化函数'% width. Precision f %%'指定饼图内百分比的数字显示宽度和小数的位数
  • radius:设置饼图的半径
  • labeldistance:每块旁边的文本标签的位置离饼的中心点的距离;
  • shadow:是否有阴影效果,默认为False。

案例:已知一个员工一天的活动时间分配为:工作8小时、睡觉7小时、吃饭3小时,玩乐6小时,根据这些信息,绘制该员工一天时间分配饼状图,效果如下。


python绘制饼状图 显示占比 python饼图设置图例位置_饼状图改变数据显示位置


参考代码如下:


python绘制饼状图 显示占比 python饼图设置图例位置_词云_02


散点图

散点图是以一个变量为横坐标另一变量为纵坐标,利用散点的分布形态反映变量统计关系的一种图形,以不同颜色、不同大小的点表示数据之间的关系。Pyplot 中绘制散点图的函数为scatter(),主要参数如下:

scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, **kwargs)

  • x:散点图中点的x轴坐标
  • y:散点图中点的y轴坐标
  • s:散点图点的大小,默认为20,标量或数组;
  • c:散点图点的颜色,默认为蓝色,标量或数组;
  • marker:指定散点图点的形状,默认为圆形;
  • cmap:颜色映射,可选,将颜色映射到已有色系,例如plt.cm.Blues
  • norm:将亮度数据归一化到 0-1 之间
  • vmin:亮度的最小值
  • vmax:亮度的最大值
  • alpha:设置散点的透明度

编程程序,绘制散点图,要求图中的每个散点随机呈现不同的大小和颜色。效果如图所示,随机生成30个点,x轴坐标和y轴坐标都在0-10之间,颜色取值在0-30之间。大小在30-300之间。效果图如下:


python绘制饼状图 显示占比 python饼图设置图例位置_饼状图改变数据显示位置_03


代码参考如下:


python绘制饼状图 显示占比 python饼图设置图例位置_词云_04


生成词云图

近年来,互联网、新媒体等行业报告中都会看到精美的词云图。词云图能够呈现出比较好的可视化效果,从视觉上可明确区分各词汇的频次快速领略文本的主旨,是很好的数据展现形式。

Python中提供的 wordcloud 库可以快速生成词云图。但主要是针对英文,通过空格进行分词。wordcloud的离线安装如下(先下载安装包):


python绘制饼状图 显示占比 python饼图设置图例位置_词云_05


比较流行的中文分词库为 jieba,可将其与 wordcloud 库联合使用从而对中文文章生成相应的词云图。 jieba库的在线安装如下:


python绘制饼状图 显示占比 python饼图设置图例位置_数组_06


WordCloud(font_path=None, width=400, height=200, margin=2, mask=None, max_words=200, min_font_size=4, stopwords=None, background_color='black', max_font_size=None, font_step=1)

  • font_path:字体路径,默认不支持中文,可通过该参数指定字体,支持 OTFTTF
  • width、height: 画布的宽度和高度,单位为像素
  • margin:文字之间的边距;
  • mask: 指定图片的形状,忽略白色部分,通常为 ndarray
  • max_words: 最多显示的词的数量,默认为200;
  • min_font_size、max_font_size:最小字体大小、最大字体大小;
  • font_step: 字体大小增加步长,默认为1
  • background_color:词云图的背景颜色,默认为黑色
  • ……

一些关键的方法:

  • generate (text): 根据文本生成词云图,返回当前对象本身;
  • to_image():将词云对象转化为图片;
  • to_file(文件名):将词云对象转化为文件;
  • to_array():将词云对象转化为数组。

生成词云图开发步骤

  • 创建 wordcloud 对象,设定基本信息;
  • 调用 generate() 方法生成词云
  • 保存或显示词云图

jieba 库分词的三种模式:

(1)精准模式:把文本精准地分开,不存在冗余

(2)全模式:把文中所有可能的词语都扫描出来,存在冗余

(3)搜索引擎模式:在精准模式的基础上,再次对长词进行切分

jieba库中的一些关键方法:

  • jieba.cut(sentence, cut_all=False, HMM=True):sentence表示需要分词的句子,cut_all 表示是否采用全模式,HMM 表示是否使用 HMM (隐马尔可夫模型)模型;
  • jieba.cut_for_search(sentence, HMM=True):sentence表示需要分词的句子,HMM表示是否使用 HMM 模型,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细;
  • jieba.cut() 方法和 jieba.cut_for_search() 方法返回的结果都是可迭代对象,可使用 for 循环获取分词后得到的每一个词语,此外,jieba.lcut() jieba.lcut_for_search() 效果分别和 jieba.cut() jieba.cut_for_search() 效果类似,直接返回列表
  • add_word(word, freq=None, tag=None) 和 del_word(word) 可在程序中动态修改词典

生成中文词云步骤

  • 读取文件内容
  • 借助 jieba 库对中文进行分词,然后将结果合并并以空格隔开
  • 打开图片文件,得到对应数组;
  • 创建WordCloud对象,设置基本信息;
  • 生成词云图,并保存或显示。

同一篇文章不同的效果图:


python绘制饼状图 显示占比 python饼图设置图例位置_数组_07


参考代码如下:


python绘制饼状图 显示占比 python饼图设置图例位置_饼图_08