![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9bd42ff0f54f4f3c94c02b32cbf7523c.png)
1. Pandas绘图
- Series和DataFrame都有一个用于生成各类图表的plot方法
- Pandas的绘图时基于Matplotlib,可以快速实现基本图形的绘制,复杂的图形还是需要用Matplotlib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
2. 折线图
2.1 Series图表
s = pd.Series([100,250,300,200,150,100])
s
s.plot()
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6af1de193caf4c7d8bc258ebb1a86275.png)
x = np.arange(0,2*np.pi,0.1)
x
y = np.sin(x)
s = pd.Series(data=y,index=x)
s
s.plot()
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bf6f06145f7b44cbb0f9beaa5f19540d.png)
2.2 DataFrame图表
data = np.random.randint(50,100,size=(5,6))
index =["1st","2nd","3th","4th","5th"]
columns = ["Jeff","Jack","Rose","Luck","Lily","Bob"]
df = pd.DataFrame(data=data,index=index,columns=columns)
df
| Jeff | Jack | Rose | Luck | Lily | Bob |
---|
1st | 93 | 81 | 66 | 68 | 56 | 78 |
---|
2nd | 53 | 80 | 84 | 85 | 56 | 51 |
---|
3th | 66 | 57 | 83 | 62 | 61 | 72 |
---|
4th | 83 | 98 | 82 | 80 | 50 | 82 |
---|
5th | 53 | 72 | 73 | 73 | 58 | 65 |
---|
df.plot()
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3e1c445e3d354c63bc5805dbc4dda7de.png)
df.T.plot()
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d6576e3fb0fc41269e07a42ea056f68c.png)
3. 柱状图和条形图
3.1 Series柱状图示例,kind = ‘bar’/‘barh’
s = pd.Series(data=[100,200,300,200])
s.index = ["Lily","Lucy","Jack","Rose"]
"""
kind : str
The kind of plot to produce:
- 'line' : line plot (default)
- 'bar' : vertical bar plot
- 'barh' : horizontal bar plot
- 'hist' : histogram
- 'box' : boxplot
- 'kde' : Kernel Density Estimation plot
- 'density' : same as 'kde'
- 'area' : area plot
- 'pie' : pie plot
- 'scatter' : scatter plot (DataFrame only)
- 'hexbin' : hexbin plot (DataFrame only)
"""
s.plot(kind="bar")
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/20fd0c66f6284f6a9edab88974932c5b.png)
s.plot(kind="barh")
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/44c99a9669f6498198d4f0f16aa67b19.png)
df = pd.DataFrame(data=np.random.rand(10,4))
df.plot(kind="bar")
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e934ec17f59840018e281369fde3bf5c.png)
df.plot.bar()
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7ccaec2fb4044e58911336b9809243af.png)
df.plot.bar(stacked=True)
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/04e983c6400948329d30b57479a07542.png)
3.2 DataFrame柱形图示例
data = np.random.randint(0,100,size=(4,3))
index = list("ABCD")
columns = ["Python","NumPy","Pandas"]
df = pd.DataFrame(data=data,index=index,columns=columns)
df
| Python | NumPy | Pandas |
---|
A | 77 | 77 | 20 |
---|
B | 20 | 73 | 93 |
---|
C | 69 | 80 | 4 |
---|
D | 64 | 13 | 6 |
---|
df.plot(kind="bar")
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3f254e14d5fa4c4389fd985a70f96ddc.png)
df.plot(kind="barh")
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e78ae4b3fdcf4e488d54add4e19b1780.png)
3.3 聚会规模可视化项目
- 读取文件 tips.csv,查看每天各种聚会规模的比例
- 求和 df.sum(),注意灵活使用 axis
- df.div():获取数 DataFrame 和其他元素的浮点除法
tips = pd.read_csv("11_Pandas绘图_tips.csv")
tips
| day | 1 | 2 | 3 | 4 | 5 | 6 |
---|
0 | Fri | 1 | 16 | 1 | 1 | 0 | 0 |
---|
1 | Stat | 2 | 53 | 18 | 13 | 1 | 0 |
---|
2 | Sun | 0 | 39 | 15 | 18 | 3 | 1 |
---|
3 | Thur | 1 | 48 | 4 | 5 | 1 | 3 |
---|
把day作为行索引
tips2 = tips.set_index("day")
tips2
| 1 | 2 | 3 | 4 | 5 | 6 |
---|
day | | | | | | |
---|
Fri | 1 | 16 | 1 | 1 | 0 | 0 |
---|
Stat | 2 | 53 | 18 | 13 | 1 | 0 |
---|
Sun | 0 | 39 | 15 | 18 | 3 | 1 |
---|
Thur | 1 | 48 | 4 | 5 | 1 | 3 |
---|
求每天的聚会规模
day_sum = tips2.sum(axis=1)
day_sum
day
Fri 19
Stat 87
Sun 76
Thur 62
dtype: int64
每天各种聚会规模的比例
tips3 = tips2.div(day_sum,axis=0)
tips3
| 1 | 2 | 3 | 4 | 5 | 6 |
---|
day | | | | | | |
---|
Fri | 0.052632 | 0.842105 | 0.052632 | 0.052632 | 0.000000 | 0.000000 |
---|
Stat | 0.022989 | 0.609195 | 0.206897 | 0.149425 | 0.011494 | 0.000000 |
---|
Sun | 0.000000 | 0.513158 | 0.197368 | 0.236842 | 0.039474 | 0.013158 |
---|
Thur | 0.016129 | 0.774194 | 0.064516 | 0.080645 | 0.016129 | 0.048387 |
---|
tips3.plot(kind="bar")
<Axes: xlabel='day'>
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d8625e5197444f8f8492d8b2d9977815.png)
4. 直方图
4.1rondom生成随机百分比直方图,调用hist方法
- 柱高表示数据的频数,柱宽表示各组数据的组距
- 参数bins可以设置直方图方柱的个数上限,越大柱宽小,数据分组越细致
- 设置density参数为True,可以把频数转换为概率
s = pd.Series([1,2,2,2,2,2,2,3,3,4,5,5,5,6,6])
s.plot(kind="hist")
<Axes: ylabel='Frequency'>
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1e1bfab4828c4b8b9b3e092aaaa061a3.png)
s.plot(kind="hist",bins=5)
<Axes: ylabel='Frequency'>
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d9ef09916b3040efb6c836be3cbb4512.png)
s.plot(kind="hist",bins=5,density=True)
<Axes: ylabel='Frequency'>
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b0674becfbce4808af1bce4ffd260ed0.png)
4.2 kde图:核密度估计,用于弥补直方图由于参数bins设置的不合理导致的精度缺失问题
s.plot(kind="hist",bins=5,density=True)
s.plot(kind="kde")
<Axes: ylabel='Density'>
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4d404c6d5de941b9823c4b7831b072c3.png)
5. 饼图
df = pd.DataFrame(data=np.random.rand(4,2),
index=list("ABCD"),
columns=["Python","Java"]
)
df
| Python | Java |
---|
A | 0.540495 | 0.100629 |
---|
B | 0.848605 | 0.101815 |
---|
C | 0.328714 | 0.361827 |
---|
D | 0.342602 | 0.757760 |
---|
df["Python"].plot(kind="pie",autopct="%.1f%%")
<Axes: ylabel='Python'>
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/bb40015e15454083b23cb94c94587d19.png)
df.plot.pie(subplots=True,figsize=(8,8))
array([<Axes: ylabel='Python'>, <Axes: ylabel='Java'>], dtype=object)
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f8b5998de51f44f5a8e76296a4f68b83.png)
- pandas画图:快速画简单的图
- 复杂的图可以用matplotlib
6. 散点图
- 散点图是观察两个一维数据列之间的关系有效方法,DataFrame对象可用
data = np.random.normal(size=(1000,2))
data
df = pd.DataFrame(data=data,columns=list("AB"))
df.head()
| A | B |
---|
0 | -0.291759 | 1.550484 |
---|
1 | -0.935913 | 0.631661 |
---|
2 | -0.883316 | 0.040398 |
---|
3 | -0.261854 | -0.745847 |
---|
4 | 1.843412 | -0.794660 |
---|
df.plot(kind="scatter",x="A",y="B")
<Axes: xlabel='A', ylabel='B'>
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/81d4f6286a3f4a49ab7c9e2e276b7d04.png)
df.plot.scatter(x="A",y="B")
<Axes: xlabel='A', ylabel='B'>
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2ac6ac58779b412580e2efe7107b7d0a.png)
7. 面积图
df = pd.DataFrame(data=np.random.rand(10,4),columns=list("ABCD"))
df
| A | B | C | D |
---|
0 | 0.042626 | 0.555709 | 0.595140 | 0.283489 |
---|
1 | 0.510244 | 0.066011 | 0.951883 | 0.726001 |
---|
2 | 0.663038 | 0.765964 | 0.992662 | 0.083721 |
---|
3 | 0.548282 | 0.005492 | 0.175496 | 0.986480 |
---|
4 | 0.656553 | 0.225131 | 0.184848 | 0.810095 |
---|
5 | 0.116009 | 0.895350 | 0.748115 | 0.485771 |
---|
6 | 0.554334 | 0.519759 | 0.609096 | 0.392924 |
---|
7 | 0.221381 | 0.882820 | 0.644140 | 0.057933 |
---|
8 | 0.913984 | 0.684586 | 0.342234 | 0.686879 |
---|
9 | 0.759520 | 0.721572 | 0.780937 | 0.402259 |
---|
df.plot(kind="area")
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e10ef74b05fe4da78be8a737b3cf7162.png)
df.plot.area(stacked=True)
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/115de4136c3844b0a0174b0ba5ffde90.png)
8. 箱型图
df = pd.DataFrame(data=np.random.rand(10,4),columns=list("ABCD"))
df
| A | B | C | D |
---|
0 | 0.677702 | 0.066629 | 0.854846 | 0.856027 |
---|
1 | 0.149347 | 0.722314 | 0.085458 | 0.902034 |
---|
2 | 0.010958 | 0.035523 | 0.286902 | 0.923202 |
---|
3 | 0.864328 | 0.965760 | 0.662281 | 0.774940 |
---|
4 | 0.306896 | 0.866431 | 0.720461 | 0.842470 |
---|
5 | 0.561130 | 0.371032 | 0.055305 | 0.304149 |
---|
6 | 0.157795 | 0.473306 | 0.152361 | 0.673328 |
---|
7 | 0.176309 | 0.596900 | 0.935771 | 0.399409 |
---|
8 | 0.328981 | 0.916401 | 0.075412 | 0.015534 |
---|
9 | 0.574044 | 0.351302 | 0.728465 | 0.227091 |
---|
df.plot(kind="box")
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e1e46b7cf17d4c0fb60ff413f6f9946f.png)
df.plot.box()
<Axes: >
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/b1772df7960e46e784c2b64a29c2c90e.png)