柱状图详细绘制解答
matplotlib绘图函数常用参数指南
绘图时坐标轴标签重叠解决办法
设置图形字体大小
雷达图
绘图常用颜色
好看的饼状图
matplotlib.rcParams['axes.unicode_minus'] = False # 正常显示负号
plt.rcParams["font.sans-serif"] = "SimHei" # 设置图片中的字体为中文黑体
python中用matplotlib画图时,横坐标标签是默认横着显示的
这个图里面显示的横轴坐标值是竖着的,看起来不太美观,把它改成横向的,只需要添加下面一句代码
rotation默认是90,即为横着显示,改成360即可正常竖直显示
plt.xticks(rotation=360)
数据集来自2019年美国大学生数学建模C题第一问。
这是是要绘制出U-47700这个物质在每个州的数量分布情况
sum_u = pd.DataFrame({'U-47700':data[data['SubstanceName'] == 'U-47700'].groupby('FIPS_State')['DrugReports'].sum()})
sum_u.plot.pie(subplots=True) # 绘制饼状图
sum_u.plot(kind='bar') # 绘制柱状图
sum_u.plot(kind='line') # 绘制线形图
sum_year_stat = pd.DataFrame({
'Morphine':data[data['SubstanceName'] == 'Morphine'].groupby('YYYY')['DrugReports'].sum(),
'Methadone':data[data['SubstanceName'] == 'Methadone'].groupby('YYYY')['DrugReports'].sum(),
'Hydromorphone':data[data['SubstanceName'] == 'Hydromorphone'].groupby('YYYY')['DrugReports'].sum(),
'Oxymorphone':data[data['SubstanceName'] == 'Oxymorphone'].groupby('YYYY')['DrugReports'].sum(),
})# 根据年份来进行分组,然后将对应物质的数量求和。
sum_year_stat.plot(kind = 'bar') # 绘制饼状图
plt.xlabel('Year') # 设置横坐标轴标签
plt.ylabel('Sum')
plt.xticks(rotation=360) # 设置横坐标值水平显示
常用颜色
粉色:‘pink’
亮粉色:‘lightpink’
亮蓝色:‘lightblue’
plt.figure(figsize=(6, 6))
plt.pie(sexc, labels=['男性', '女性'],colors=['lightblue','lightpink'], autopct='%1.1f%%')
plt.title("会员性别比例饼状图", fontsize=15)
plt.legend()
figure对象——划分子图
当三个参数都小于10时,可以省略逗号,用一个三位数表示三个参数,
例如subplot(2,2,1)等价于subplot(221)
matplolib绘制的图形中默认为英文字体,所以一般中文字体无法显示,只需要把字体改为中文字体即可。
subtitle('标题')
添加子图标题
title('标题')
绘制柱状图,并在图中柱子上显示数字
plt.figure(figsize=(7, 6))
plt.bar(x=sum_year.index, height=sum_year.values)
# 完整的显示坐标轴,避免间隔显示
x = np.arange(2004,2014,1)
plt.xticks(x)
#在柱状图上面显示数字
for x, y in enumerate(sum_year.values):
plt.text(2004+x, y+100, '%s' % y, ha='center', va='bottom')
# 设置柱状图标题
plt.title("每一年加入会员人数柱状图")
# 设定X,Y轴标签
plt.xlabel("年份")
plt.ylabel("人数")
plt.show()
注意这里x轴坐标是从2004开始,所以在添加数字时,x需要+2004。而y+100是为了在柱子上方一点,避免和柱子重合。
keras是一个由Python编写的高层的神经网络和深度学习库。Tensorflow的官方API。
Keras集成的数据集
波士顿房价数据集绘制平均房间数和房价的散点图
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import pandas as pd
#加载数据
TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1],TRAIN_URL)
COLUMN_NAMES=['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species']
df_iris = pd.read_csv(train_path, names=COLUMN_NAMES, header=0)
iris = np.array(df_iris)
plt.scatter(iris[:,2], iris[:,3], c=iris[:, 4], cmap='brg')
plt.title("Anderson's Iris Data Set\n (Blue->Setosa | Red->Versicolor | Green->Virginica)")
plt.xlabel(COLUMN_NAMES[2])
plt.ylabel(COLUMN_NAMES[3])
plt.show()
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import pandas as pd
# 加载数据
TRAIN_URL = "http://download.tensorflow.org/data/iris_training.csv"
train_path = tf.keras.utils.get_file(TRAIN_URL.split('/')[-1], TRAIN_URL)
COLUMN_NAMES = ['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species']
df_iris = pd.read_csv(train_path, names=COLUMN_NAMES, header=0)
iris = np.array(df_iris)
# 绘制画布尺寸和整个画布标题
fig = plt.figure('Iris Data', figsize=(15, 15))
# 添加子图总标题
fig.suptitle("Anderson's Iris Data Set\n(Blue->Setosa | Red->Versicolor | Green->Virginica)")
# 循环绘制子图
for i in range(4):
for j in range(4):
plt.subplot(4, 4, 4 * i + (j + 1)) # 创建子图
if (i == j): # 横纵坐标相同,输出当前属性名称
plt.text(0.3, 0.5, COLUMN_NAMES[i], fontsize=15)
else:
plt.scatter(iris[:, j], iris[:, i], c=iris[:, 4], cmap='brg') # 绘制散点图
if(i==0): # 输出横坐标名称
plt.title(COLUMN_NAMES[j])
if(j==0): # 输出纵坐标名称
plt.ylabel(COLUMN_NAMES[i])
# 调整子图间距
plt.tight_layout(rect=[0, 0, 1, 0.93])
plt.show()
使用matplotlib绘图时,负数的符号显示不正常,添加下面的语句。
import matplotlib
matplotlib.rcParams['axes.unicode_minus']=False
参考文献
# 设定画图板尺寸
plt.figure(figsize=(12,16))
# 建立一个循环,输出图片
for i,data in enumerate(xtest[:100]):
# 设定子图,将每个子图输出到对应的位置
plt.subplot(10,10,i+1)
# 输出图片,取出来的数据是必须处理好再输出的,此例为8*8
plt.imshow(data.reshape(8,8))
# 测试的标题和真实的标题打印出来
plt.title('C:'+str(y_[i])+'\nT:'+str(ytrue[:100][i]),size=20)
# 关掉x y轴的刻度
plt.axis('off')
# 调整每隔子图之间的距离
plt.tight_layout()
plt.figure(figsize=(10, 5))
sns.barplot(x=list(drink["id"]), y=list(drink["Goods"]))
plt.title("非酒精饮料类别中不同商品的销量", fontsize= 15)
plt.xlabel("商品销量")
plt.ylabel("商品类别")
修改透明度,并设置自动调整间距
plt.figure(figsize=(10, 5))
sns.barplot(x=list(drink["id"]), y=list(drink["Goods"]),alpha=0.4) # 设置透明度alpha=0.4
plt.title("非酒精饮料类别中不同商品的销量", fontsize= 15)
plt.xlabel("商品销量")
plt.ylabel("商品类别")
# plt.xticks(fontsize=5) #设定x坐标标签字体大小
# plt.yticks(fontsize=7) #设定y坐标标签字体大小
plt.tight_layout() # 自动调整坐标轴标签间距。
改变透明度alpha之后,色彩更淡跟好看一些,自动调整间距,可以显示完全坐标轴。
# 设置风格
plt.style.use('ggplot') # 自动美化图形