# – coding: utf-8 – import pandas as pd import matplotlib.pyplot as plt df = pd.read_excel(r'组合图.xlsx') # 画柱状图 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams[''] # 为图表设置双坐标轴 plt.twinx() plt.bar(df['月份'], df['绘画课'], color='blue', linewidth=4, label='绘画课') # 画折线图 plt.plot(df['月份'], df['书法课'], color='red') plt.title('组合图') plt.xlabel('月份') plt.ylabel('课程') # 显示图标 plt.show()
时间: 2023-09-19 13:10:10 浏览: 207
这段代码使用了Python中的pandas和matplotlib库,实现了一个组合图,包括柱状图和折线图。
首先,使用pandas库中的read_excel函数读取了一个名为“组合图.xlsx”的Excel文件,将数据存储在名为df的DataFrame对象中。
接下来,使用matplotlib库中的rcParams函数设置了一些图表的属性,包括字体、坐标轴等等。
然后,调用twinx()函数为图表设置一个双坐标轴,即在同一张图表上绘制两个不同的坐标轴。
使用bar()函数画出了一个柱状图,在x轴上显示月份,y轴上显示绘画课的数量。其中,color参数指定了柱状图的颜色,linewidth参数指定了柱状图边框的线宽,label参数指定了柱状图的标签。
最后,使用plot()函数画出了一个折线图,在x轴上显示月份,y轴上显示书法课的数量。其中,color参数指定了折线图的颜色。
在设置完图表的标题、x轴标签、y轴标签之后,使用show()函数将图表显示在屏幕上。
总之,这段代码展示了如何使用Python中的pandas和matplotlib库绘制一个组合图,包括柱状图和折线图,并且可以自定义图表的属性和样式。
相关问题
分析以下代码#!/usr/bin/python # -*- coding:utf-8 -*- import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt from sklearn import svm from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 'sepal length', 'sepal width', 'petal length', 'petal width' iris_feature = u'花萼长度', u'花萼宽度', u'花瓣长度', u'花瓣宽度' if __name__ == "__main__": path = 'D:\\iris.data' # 数据文件路径 data = pd.read_csv(path, header=None) x, y = data[range(4)], data[4] y = pd.Categorical(y).codes x = x[[0, 1]] x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=1, train_size=0.6) # 分类器 clf = svm.SVC(C=0.1, kernel='linear', decision_function_shape='ovr') # clf = svm.SVC(C=0.8, kernel='rbf', gamma=20, decision_function_shape='ovr') clf.fit(x_train, y_train.ravel()) # 准确率 print (clf.score(x_train, y_train)) # 精度 print ('训练集准确率:', accuracy_score(y_train, clf.predict(x_train))) print (clf.score(x_test, y_test)) print ('测试集准确率:', accuracy_score(y_test, clf.predict(x_test))) # decision_function print ('decision_function:\n', clf.decision_function(x_train)) print ('\npredict:\n', clf.predict(x_train)) # 画图 x1_min, x2_min = x.min() x1_max, x2_max = x.max() x1, x2 = np.mgrid[x1_min:x1_max:500j, x2_min:x2_max:500j] # 生成网格采样点 grid_test = np.stack((x1.flat, x2.flat), axis=1) # 测试点 # print 'grid_test = \n', grid_test # Z = clf.decision_function(grid_test) # 样本到决策面的距离 # print Z grid_hat = clf.predict(grid_test) # 预测分类值 grid_hat = grid_hat.reshape(x1.shape) # 使之与输入的形状相同 mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False cm_light = mpl.colors.ListedColormap(['#A0FFA0', '#FFA0A0', '#A0A0FF']) cm_dark = mpl.colors.ListedColormap(['g', 'r', 'b']) plt.figure(facecolor='w') plt.pcolormesh(x1, x2, grid_hat, shading='auto', cmap=cm_light) plt.scatter(x[0], x[1], c=y, edgecolors='k', s=50, cmap=cm_dark) # 样本 plt.scatter(x_test[0], x_test[1], s=120, facecolors='none', zorder=10) # 圈中测试集样本 plt.xlabel(iris_feature[0], fontsize=13) plt.ylabel(iris_feature[1], fontsize=13) plt.xlim(x1_min, x1_max) plt.ylim(x2_min, x2_max) plt.title(u'鸢尾花SVM二特征分类', fontsize=16) plt.grid(b=True, ls=':') plt.tight_layout(pad=1.5) plt.show()
这段代码是使用 SVM(支持向量机)算法对鸢尾花数据集进行分类,并且使用 matplotlib 库对分类结果进行可视化。代码的主要流程如下:
1. 导入必要的库,包括 numpy、pandas、matplotlib、sklearn 中的 svm、train_test_split 和 accuracy_score。
2. 读取鸢尾花数据集,将前四列作为特征值 x,将最后一列作为目标值 y,并将 y 转换为数字编码。
3. 选取前两个特征值作为二维平面上的坐标,将数据集划分为训练集和测试集。
4. 使用 svm.SVC() 函数创建支持向量机分类器,并使用训练集对其进行训练。
5. 计算训练集和测试集的准确率,并输出结果。
6. 使用 predict() 函数对训练集进行预测,并输出 decision_function() 函数计算出的样本到决策面的距离。
7. 使用 meshgrid() 函数生成二维网格采样点,并使用 predict() 函数对每个采样点进行分类预测,将预测结果可视化出来。
8. 可视化结果包括训练集和测试集的样本点、分类边界和测试集的样本点所在的圆圈。
9. 最后使用 show() 函数显示可视化结果。
#coding:utf8 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np sns.set_style('darkgrid') import matplotlib.font_manager as fm myfont=fm.FontProperties(fname=r'./data/simhei.ttf') #请完善下面的函数 def push_week(new_data): ############ Begin ############ new_data=new_data[new_data['type']==4].copy() #选取样本 new_data['weekdays'] = pd.to_datetime(new_data['time']).apply(lambda x: x.weekday()+1) #时间转化 week_days = new_data.groupby('weekdays')['user_id'].count() #统计购买次数 fig=plt.figure(figsize=(8,6)) #设置大小 bar_width = 0.33 # 设置宽度 plt.bar(week_days.index.values , week_days.values, bar_width, label='下单的次数') plt.xlabel('时间',fontproperties=myfont,fontsize=9) plt.ylabel('数量',fontproperties=myfont,fontsize=9) plt.title('一周内每天的下单情况',fontproperties=myfont,fontsize=12) plt.xticks(week_days.index.values, ('周一', '周二', '周三', '周四', '周五', '周六', '周日'),fontproperties=myfont,fontsize=9) plt.ylim(0,300) plt.legend(prop=myfont) ############ End ############ plt.savefig('./task2/task2_week.png') plt.close(fig) def push_date(new_data): new_data = new_data[(new_data['type'] == 4) & (pd.to_datetime(new_data['time']) < pd.to_datetime('2016-03-01'))].copy() #选出2016年数据 new_data['days'] = [x.day for x in pd.to_datetime(new_data['time'])] #选出天数 renew=new_data.groupby('days')['sku_id'].count() fig = plt.figure(figsize=(8, 6)) plt.plot(renew.index.values,renew.values,label='购买次数') plt.xlabel('天数',fontproperties=myfont,fontsize=9) plt.ylabel('次数',fontproperties=myfont,fontsize=9) plt.title('购买量和月内日期的关系',fontproperties=myfont,fontsize=12) plt.legend(prop=myfont) ############ End ############ plt.savefig('./task2/task2_date.png') plt.close(fig) 报错src/task2_test.py:22: FutureWarning: The pandas.datetime class is deprecated and will be removed from pandas in a future version. Import from datetime instead. data['weekdays'] = pd.to_datetime(data['time']).apply(pd.datetime.weekday) + 1 购买意愿与星期之间的关系图完成! 购买意愿与日期之间的关系图完成!
这个错误是因为pandas.datetime类已经被弃用,建议使用datetime库来代替。可以将代码中的pd.datetime.weekday()改为pd.datetime().weekday(),即可解决这个问题。
修改后的代码如下:
```python
#coding:utf8
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
sns.set_style('darkgrid')
import matplotlib.font_manager as fm
myfont=fm.FontProperties(fname=r'./data/simhei.ttf')
#请完善下面的函数
def push_week(new_data):
############ Begin ############
new_data=new_data[new_data['type']==4].copy() #选取样本
new_data['weekdays'] = pd.to_datetime(new_data['time']).apply(lambda x: x.weekday()+1) #时间转化
week_days = new_data.groupby('weekdays')['user_id'].count() #统计购买次数
fig=plt.figure(figsize=(8,6)) #设置大小
bar_width = 0.33 # 设置宽度
plt.bar(week_days.index.values , week_days.values, bar_width, label='下单的次数')
plt.xlabel('时间',fontproperties=myfont,fontsize=9)
plt.ylabel('数量',fontproperties=myfont,fontsize=9)
plt.title('一周内每天的下单情况',fontproperties=myfont,fontsize=12)
plt.xticks(week_days.index.values, ('周一', '周二', '周三', '周四', '周五', '周六', '周日'),fontproperties=myfont,fontsize=9)
plt.ylim(0,300)
plt.legend(prop=myfont)
############ End ############
plt.savefig('./task2/task2_week.png')
plt.close(fig)
def push_date(new_data):
new_data = new_data[(new_data['type'] == 4) & (pd.to_datetime(new_data['time']) < pd.to_datetime('2016-03-01'))].copy() #选出2016年数据
new_data['days'] = [x.day for x in pd.to_datetime(new_data['time'])] #选出天数
renew=new_data.groupby('days')['sku_id'].count()
fig = plt.figure(figsize=(8, 6))
plt.plot(renew.index.values,renew.values,label='购买次数')
plt.xlabel('天数',fontproperties=myfont,fontsize=9)
plt.ylabel('次数',fontproperties=myfont,fontsize=9)
plt.title('购买量和月内日期的关系',fontproperties=myfont,fontsize=12)
plt.legend(prop=myfont)
############ End ############
plt.savefig('./task2/task2_date.png')
plt.close(fig)
```
建议在代码中加入注释,使得代码更加易读易懂。
阅读全文