练习:Python绘图(pymysql,pandas,matpl
2020-05-10 本文已影响0人
littleblues
一.利用pymysql库连接数据库,并用pandas读取数据
1.pymysql的connect()函数连接数据库
2.pandas的read_sql()函数以DataFrame形式读取数据
import pymysql
import pandas as pd
db=pymysql.connect(host='localhost',port=3308,user='root',password='',database='test',charset='utf8')
sql='select * from report1'
data=pd.read_sql(sql=sql,con=db)
data
结果:
3.导入matplotlib.pyplot 库绘制图:
plt.plot() 折线图
plt.bar() 柱状图
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
db=pymysql.connect(host='localhost',port=3308,user='root',password='',database='test',charset='utf8')
sql='select * from report1'
data=pd.read_sql(sql=sql,con=db)
data
x=data['month']
y1=data['number']
y2=data['culnum']
plt.bar(x,y1)
#plt.plot(x,y2)
plt.show()
结果:
4.将折线图与柱状图绘制在一张图 添加图标题
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
db=pymysql.connect(host='localhost',port=3308,user='root',password='',database='test',charset='utf8')
sql='select * from report1'
data=pd.read_sql(sql=sql,con=db)
data
x=data['month']
y1=data['number']
y2=data['culnum']
plt.bar(x,y1)
plt.plot(x,y2)
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.title('基金成立数量(月)')
plt.show()
结果:
5.添加图标签
添加图标签时,如果添加标签label后无法显示标签,可以用plt.legend()设置标签位置,可以解决标签不能正常显示问题
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
db=pymysql.connect(host='localhost',port=3308,user='root',password='',database='test',charset='utf8')
sql='select * from report1'
data=pd.read_sql(sql=sql,con=db)
data
x=data['month']
y1=data['number']
y2=data['culnum']
plt.bar(x,y1,label='月成立数')
plt.plot(x,y2,color='blue',label='月成立累计数')
plt.legend(loc='upper left')#设置图例的位置为左上角,label设置未显示,可能是图表位置未设置
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.title('基金成立数量(月)')
plt.show()
结果:
6.设置双坐标轴
如上图,在同时绘制两个图形时,由于两个图的x标签量级差异较大,导致柱状图的显示过于密集,此时可以用plot.twinx()设置双坐标轴。
值得注意的是,双坐标轴的函数必须在第一个图绘制完,第二个图绘制前用,即双坐标函数用在两个绘图函数的中间。另外设置双坐标轴后
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
db=pymysql.connect(host='localhost',port=3308,user='root',password='',database='test',charset='utf8')
sql='select * from report1'
data=pd.read_sql(sql=sql,con=db)
data
x=data['month']
y1=data['number']
y2=data['culnum']
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.title('基金成立数量(月)')
plt.bar(x,y1,label='月成立数')
plt.legend(loc='upper left')#设置图例的位置为左上角,label设置未显示,可能是图表位置未设置
plt.twinx() #设置双坐标轴
plt.plot(x,y2,color='blue',label='月成立累计数')
plt.show()
结果:
image.png
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
db=pymysql.connect(host='localhost',port=3308,user='root',password='',database='test',charset='utf8')
sql='select * from report1'
data=pd.read_sql(sql=sql,con=db)
data
x=data['month']
y1=data['number']
y2=data['culnum']
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.title('基金成立数量(月)')
plt.bar(x,y1,label='月成立数')
plt.legend(loc='upper left')#设置图例的位置为左上角,label设置未显示,可能是图表位置未设置
plt.twinx() #设置双坐标轴
plt.plot(x,y2,color='blue',label='月成立累计数')
plt.legend(loc='upper right') #第二个图需要重新设置图例位置
plt.show()
结果:
7.调整图形大小
import pymysql
import pandas as pd
import matplotlib.pyplot as plt
db=pymysql.connect(host='localhost',port=3308,user='root',password='',database='test',charset='utf8')
sql='select * from report1 where month>=\'201001\''
data=pd.read_sql(sql=sql,con=db)
data
x=data['month']
y1=data['number']
y2=data['culnum']
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.title('基金成立数量(月)')
plt.bar(x,y1,label='月成立数')
plt.legend(loc='upper left')#设置图例的位置为左上角,label设置未显示,可能是图表位置未设置
plt.twinx() #设置双坐标轴
plt.plot(x,y2,color='blue',label='月成立累计数')
plt.legend(loc='upper right') #第二个图需要重新设置图例位置
plt.rcParams['figure.figsize']=(30,6)#调整图形大小,长*高,30,6表示像素
plt.gcf().autofmt_xdate()
plt.show()
结果:
image.png
待解决问题:
1.横坐标过于密集的问题
2.图形左右两边留白过多的问题