Python的利器Pandas库超级简单的数据可视化作图,你知道吗?
1 说明:
=====
1.1 Pandas
1.1.1 已经成为最受欢迎的数据科学库之一。
1.1.2 它易于使用,文档非常棒,而且功能强大。
1.1.3 是python的一个利器,一个非常强大的数据分析工具包。
1.1.4 pandas也集成了数据可视化的功能,其数据可视化已经可以满足我们大部分的要求了,也就省下了我们很多自己使用 如 matplotlib 来数据可视化的工作。
======
1.2 我最近一直介绍各种各样的python的数据可视化作图,有静态的,也有动态交互式的,有个条友说他曾经折腾来折腾去还是回到matplotlib,我的介绍技术文章,尽量通俗易懂,我的代码拿来就可以使用,省去大家很多时间。
1.3 今天,就来介绍一个更简单的python的数据可视化静态作图,就是pandas的内置plot法(其实就是内置了matplotlib)。
1.4 顺带复习python和pandas等的基础知识,代码注释里有详细讲解,注意这是讲解学习版。
python数据可视化:由繁入简
2 准备:
=====
2.1 官网:https://pandas.pydata.org/ https://www.yiibai.com/pandas/python_pandas_visualization.html
2.2 安装:pip install pandas #推荐国内源安装,本机如下 sudo pip3.8 install -i https://mirrors.aliyun.com/pypi/simple pandas
2.3 查看版本:import pandas pandas.__version__
2.4 环境:
华为笔记本电脑、深度deepin-linux操作系统、python3.8和微软vscode编辑器。
2.5 资料来源:
2.5.1 代码:import pandas as pd help(pd.DataFrame.plot)
2.5.2 图:
2.5.3 对英文的文档进行代码提炼、修改、注释,便于大家拿来就能使用。
3 pandas内置plot作图:
================
3.1 通常使用 pandas 进行下列的图形的快速绘图:
=======================
‘line’
‘bar’ or ‘barh’ for bar plots
‘hist’ for histogram
‘box’ for boxplot
‘area’ for area plots
‘scatter’ for scatter plots
‘pie’ for pie plots
=====================
3.2 line折线图:
3.2.1 代码:#导出模块 import pandas as pd #数据源,2组数据 d = {"col1": [2,1,3,5,3], "col2": [3,4,1,5,2] } #df = pd.DataFrame(data=d) #默认x轴坐标轴的标签 #指定x坐标轴的标签:index定义 df = pd.DataFrame(data=d,index=["a", "b", "c", "d","e"]) #只显示col1的这条折线line #df = pd.DataFrame(data=d,index=["a", "b", "c", "d","e"],columns=["col1"]) #df.plot() #默认是plot.line df.plot.line() #下面这么放,是区别平时我们看到以matplotlib作图为主的代码不同 #虽然pandas的内置plot是matplotlib,但是仍需要下面2种方法使其图片显示出来 #方法一 #import matplotlib.pyplot as plt #plt.show() #方法二 import matplotlib.pylab as pl pl.show()
3.2.2 图:
3.3 bar柱状图:垂直柱状图
3.3.1 代码:#导出模块 import pandas as pd #数据源,2组数据 d = {"col1": [2,1,3,5,3], "col2": [3,4,1,5,2] } #指定x坐标轴的标签:index定义 df = pd.DataFrame(data=d,index=["dog", "pig", "cow", "sheep","horse"],) #默认显示2组 #df = pd.DataFrame(data=d,columns=["col1", "col2"]) #df = pd.DataFrame(data=d,) #等同上面 #subplots=True,分子图显示,2组就分2个子图 #df.plot.bar(subplots=True) #比matplotlib超级简单 df.plot.bar() #默认是一张图显示2组 #在这样放一次 import matplotlib.pyplot as plt plt.show()
3.3.2 图:
bar==默认是vertical bar plot==垂直柱状图
3.4 barh水平柱状图:
3.4.1 代码:#导出模块 import pandas as pd import matplotlib.pyplot as plt """ #数据源:方法一 d = {"a": [2,1,3,5,3], "b": [3,4,1,5,2], "c": [1,2,4,2,2] } #指定x坐标轴的标签:index定义 df = pd.DataFrame(data=d,index=["dog", "pig", "cow", "sheep","horse"]) """ #方法二: df = pd.DataFrame( {"a": [2,1,3,5,3], "b": [3,4,1,5,2], "c": [1,2,4,2,2], }, index=["dog", "pig", "cow", "sheep","horse"]) #启动pandas的df的plot的barh图 df.plot.barh() #barh==horizontal bar plot==水平柱状图 #图片展示 plt.show()
3.4.2 图:
3.5 box箱式图:
3.5.1 代码:#导出模块 import pandas as pd import matplotlib.pyplot as plt #方法一 d= {"a": [2,1,3,5,3,3,4,1,5,2], "b": [3,4,1,5,2,1,2,4,2,2], "c": [1,2,4,2,2,3,1,5,3,4], "d": [3,1,5,3,4,2,1,3,5,3],} df=pd.DataFrame(data=d,) """ #建议数据大于4组10列 df = pd.DataFrame( {"a": [2,1,3,5,3,3,4,1,5,2], "b": [3,4,1,5,2,1,2,4,2,2], "c": [1,2,4,2,2,3,1,5,3,4], "d": [3,1,5,3,4,2,1,3,5,3], #},columns=list("abcd")) #注意已经有abcd了,所以columns=list("abcd")不需要 }) #等同于上面 """ #ax = df.plot.box() df.plot.box() #等于上面,box=箱式图 #图片展示 plt.show()
3.5.2 图:
3.6 stackedbar垂直堆砌柱状图:
3.6.1 代码:#导出模块 import pandas as pd import matplotlib.pyplot as plt #数据 d= {"a": [2,1,3,5,3,3,4,1,5,2], "b": [3,4,1,5,2,1,2,4,2,2], "c": [1,2,4,2,2,3,1,5,3,4], "d": [3,1,5,3,4,2,1,3,5,3],} #注意:index是x坐标轴的标签,注意list("ABCDEFGHIJ")=["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] """ #插入知识点:复习一下 aaa=list("ABCDEFGHIJ") df=pd.DataFrame(data=d,index=aaa) #print(aaa) #["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] """ df=pd.DataFrame(data=d,index=list("ABCDEFGHIJ")) #等同于上面 #注意bar是柱状图,括号里定义stacked=True就是垂直堆砌柱状图 #默认stacked=False,不是堆砌柱状图,图标的标题名 df.plot.bar(stacked=True,title="pd_plot_stacked_bar") #图片展示 plt.show()
3.6.2 图:
===高级一点===
4 area面积图:
==========
4.1 代码:#导出模块 import pandas as pd import matplotlib.pyplot as plt #数据 df = pd.DataFrame({ "sales": [3, 2, 3, 9, 10, 6], "signups": [5, 5, 6, 12, 14, 13], "visits": [20, 42, 28, 62, 81, 50], }, #index=pd.date_range(start="2018/01/01", end="2018/07/01",freq="M",) ,#这样报错,报中文设置错误 #index=pd.date_range(start="1M", end="7M",freq="M",) ,#这样报错 index=["1M","2M","3M","4M","5M","6M"], #本机这样没有报错 #index=["1月","2M","3M","4M","5M","6M"], #本机这样没有报错 ) #ax = df.plot.area() #df.plot.area() df.plot.area(stacked=True,) #默认是True #df.plot.area(stacked=False) #如果数据差别比较大,建议不要堆砌 plt.show()
4.2 图:
4.3 解决中文办法,代码,推荐这种办法,自己解决中文字体问题:#导出模块 import pandas as pd import matplotlib.pyplot as plt #导出通用字体设置 from matplotlib import font_manager #定义引出字体模块、位置、大小,字体在根目录下,华文仿宋.ttf自己下载的中文字体 my_font = font_manager.FontProperties(fname="hwfs.ttf",size=10) #定义x坐标轴的文字列表,python3中不要求加u,加u也没事 xtick_labels=[u"1月","2月","3月","4月","5月","6月"] df = pd.DataFrame({ "sales": [3, 2, 3, 9, 10, 6], "signups": [5, 5, 6, 12, 14, 13], "visits": [20, 42, 28, 62, 81, 50], }, #index=pd.date_range(start="2018/01/01", end="2018/07/01",freq="M",) ,#这样报错,报中文设置错误 index=xtick_labels, ) df.plot.area() #默认的x坐标刻度位置列表 x=[1,2,3,4,5,6] plt.xticks(x,xtick_labels,fontproperties=my_font) plt.show()
4.4 图:解决中文字体,则需要调用matplotlib的作图法,调动函数
4.5 官方代码、效果图和问题分析:
#index=pd.date_range(start="2018/01/01", end="2018/07/01",freq="M",) #print(index) """ DatetimeIndex(["2018-01-31", "2018-02-28", "2018-03-31", "2018-04-30", "2018-05-31", "2018-06-30"], dtype="datetime64[ns]", freq="M") """ #报错原因,我暂时无法解决 """ /usr/local/python3.8/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:214: RuntimeWarning: Glyph 26376 missing from current font. font.set_text(s, 0.0, flags=flags) /usr/local/python3.8/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py:183: RuntimeWarning: Glyph 26376 missing from current font. font.set_text(s, 0, flags=flags) """
5 饼状图pie:
========
5.1 代码:#导出模块 import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame( {"mass": [0.330, 4.87 , 5.97], "radius": [2439.7, 6051.8, 6378.1] }, index=["Mercury", "Venus", "Earth"] ) #y="mass",相当于饼图的标题名,位于y轴 #plot = df.plot.pie(y="mass", figsize=(5, 5)) #df.plot.pie(y="mass", figsize=(5, 5)) #只显示mass的饼状图 df.plot.pie(subplots=True, figsize=(5, 5)) #显示mass和radius的两个子图的饼状图 #subplots=True,默认是False plt.show()
5.2 图:
6 散点图Scatter:
============
6.1 代码:#导出模块 import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame( [[5.1, 3.5, 0], [4.9, 3.0, 0], [7.0, 3.2, 1],[6.4, 3.2, 1], [5.9, 3.0, 2]], columns=["length", "width", "species"] ) #经典Scatter散点图 #只能显示2组数据,将x和y轴的2组5份数据进行类似x和y的作图 ax1 = df.plot.scatter(x="length",y="width",c="red") """ #高级散点图,省略,仅仅给代码 ax2 = df.plot.scatter(x="length", y="width", c="species", colormap="viridis") """ plt.show()
6.2 图:
7 小结:
静态图其实也很重要,在平时的绝大多数人的多数工作中,基本上都是用到静态图,适合学生、老师、工作人员,所以今天重点将pandas的基本绘图法,超级简单,比matplotlib还简单。
其实就是pandas内置matplotlib,调出作图。
===自己整理并分享出来===
喜欢的就点赞、评论、关注、转发和收藏。
学会这28句话,10年后孩子最有出息最近看到一段话人生最重要的东西,其实大都没什么用爱情,正义,自由,尊严,文明但这些,才是能与我们一身相守的东西,是生命最重要的存在,会在最灰黯时刻拯救自己。那到底如何才能给予孩子这
洗个澡,一家五口中毒身亡1000个和死亡擦肩而过的瞬间冬天最高发的事故什么?你绝对想不到一氧化碳中毒。洗个澡全家灭门?一氧化碳中毒了解一下今天之所以讲一氧化碳中毒,是因为看到这个沉重的新闻这类新闻也许你不是第一次看过,除了心里有点惋惜
看完这10个瞬间,我决定原谅这糟糕的2020年2020,终于要过去了。有人说,这一年,太不值得了。是啊,疫情山火洪水地震意外总是来的那么猝不及防,生活更是不尽如人意。无数次想喊一声滚蛋吧,2020!可真正到了这一天,回头看看,
这4种情况下,千万别让爸爸亲孩子爸爸,是一种奇怪的生物。你让他带孩子吧,他10分钟就烦。但等你把孩子哄睡着,他又凑上去亲个没完。亲就亲吧,不能容忍的是,他还经常啃孩子一脸口水!说他他还不愿意,但实际上这种亲亲,可
妈,我截肢算了孩子总喊痛,可能是被这种病盯上了谁能想到,痛风都开始嚯嚯00后了。前两天看到深圳卫健委发了一个新闻,一个年仅12岁的男孩手脚莫名其妙肿胀,还直呼要截肢,一了百了。孩子爹妈吓傻了,赶紧带娃去医院一查,血尿酸高达83
孩子收到10万块压岁钱怎么办?这个爸爸的做法太绝了压岁钱,你们今年收了多少?前几天,一张全国压岁钱地图引发热议,广东又被群嘲了!从图上看,北方人均5001000,东南沿海人均15003000,除了广东!广东以人均50块垫底全国,莆
当婆家一直无视你对他们的好,你还会继续好下去吗11年和老公结婚,远嫁,因为爱情,裸嫁,死活都要嫁,爸妈扭不过,出钱给我们拍了婚纱照,给我们办了婚礼,婆家提都不提这事,如果不是爸妈估计这辈子我都没机会穿上婚纱。婚前,爸妈爱我宠我
麻辣卤鸡爪,做法简单,配方详细第一步把鸡爪洗干净。第二步鸡爪冷水下锅,加入适量料酒,几片生姜,给鸡爪去味。第三步水开后关火,捞出鸡爪。过一下凉水洗去上面的浮沫,这样吃起来更Q弹更干净。第四步去掉鸡爪的脚趾甲,可
全职妈妈,老公工资卡不给你,每月按时转账,你怎么想?我是一个全职妈妈,大宝九岁,二宝还在肚子里,再有两个多月就生了,我已经全职带娃七年了。和老公是自由恋爱,当初嫁给他,没要求他给彩礼,没要求他买三金,没要求他办一个像样的婚礼,更没要
东野圭吾书评白夜行ampampamp解忧杂货店看完压抑的不想说话从来没有在白夜行走过的人呐是否会害怕万因皆由欲起吧因为个人名利因为爱不过你们也算有可以为此去搭上命的人或事却仍是压抑解忧杂货店看到最后忍不住落泪只为浪矢杂货店最后
红烧排骨这样做简单又好吃,外酥里嫩,汤汁浓郁,上桌就光盘准备材料排骨,姜,蒜,花椒,干辣椒,八角(想加配菜的可以根据可以的喜好来哦)第一步排骨洗净第二步冷水下锅,加入姜片,料酒去腥,煮开捞出洗净沥干水分备用第三步准备配料,蒜切末,姜切末