模仿下述代码画出评分与评分人数之间的雷达图import pandas as pd import matplotlib.pyplot as plt # 读取Excel文件 data = pd.read_excel('C:\\Users\\zwj\\Desktop\\豆瓣读书排行榜-清洗后.xlsx') # 提取评分列数据 plt.rcParams['font.sans-serif']='SimHei' ratings = data['评分'] # 绘制直方图 plt.hist(ratings, bins=4, edgecolor='black') plt.xlabel('评分') plt.ylabel('电影数量') plt.title('豆瓣电影评分分布') plt.show()
时间: 2023-06-17 10:08:10 浏览: 228
抱歉,雷达图是基于多个维度的数据绘制的图表,与直方图不同,无法直接利用 pandas 和 matplotlib 库绘制。您可以尝试使用第三方库如 echarts 或 plotly 来绘制雷达图。以下是一个使用 echarts 绘制雷达图的简单示例:
```python
import pandas as pd
import echarts
# 读取Excel文件
data = pd.read_excel('C:\\Users\\zwj\\Desktop\\豆瓣读书排行榜-清洗后.xlsx')
# 提取评分和评分人数列数据
ratings = data['评分']
num_of_ratings = data['评分人数']
# 绘制雷达图
chart = echarts.Radar('豆瓣图书评分')
chart.config(schema=[{'name': '评分', 'max': 10},
{'name': '评分人数', 'max': 1000000}])
chart.add('豆瓣图书', [list(zip(ratings, num_of_ratings))])
chart.render()
```
注意:上述示例代码需要安装 echarts 和 pandas 库。
相关问题
# 导入库 import pandas as pd import numpy as np import matplotlib.pyplot as plt df = pd.read_excel('雷达图.xlsx') # 读取数据表 df = df.set_index('性能评价指标') # 将数据汇总的“性能评价指标”列设置为行索引 df = df.T # 转置数据表格 df.index.name = '品牌' # 将转置后的数据中行索引那一列的名称修改为“品牌” # 自定义一个函数用于制作雷达图 def plot_radar(data, feature): # 设置字体格式 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 指定各个品牌要显示的性能评价指标的名称 cols = ['动力性', '燃油经济性', '制动性', '操控稳定性', '行驶平顺性', '通过性', '安全性', '环保性'] # 为每个品牌设置图表中的显示颜色 colors = ['green', 'blue', 'red', 'yellow'] # 根据要显示的指标个数对圆形进行等分 angles = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(cols), endpoint=False) # 连接刻度线数据 angles = np.concatenate((angles, [angles[0]])) fig = plt.figure(figsize=(8, 8)) # 设置显示图表的窗口大小 ax = fig.add_subplot(111, polar=True) # 设置图表在窗口中的显示位置,并设置坐标轴为极坐标体系 for i, c in enumerate(feature): stats = data.loc[c] # 获取品牌对应的指标数据 stats = np.concatenate((stats, [stats[0]])) # 连接品牌的指标数据 # 制作雷达图 ax.plot(angles, stats, '-', linewidth=6, c=colors[i], label='%s' % (c)) ax.fill(angles, stats, color=colors[i], alpha=0.25) # 为雷达图填充颜色 ax.legend() # 为雷达图添加图例 ax.set_yticklabels([]) # 隐藏坐标轴数据 ax.set_thetagrids(angles * 180 / np.pi, cols, fontsize=16) # 添加并设置数据标签 plt.show() # 显示制作的雷达图 return fig # 调用自定义函数制作雷达图 fig = plot_radar(df, ['A品牌']) # 查看单个品牌的性能评价指标 fig = plot_radar(df, ['A品牌', 'B品牌', 'C品牌', 'D品牌'])
这段代码是用 Python 语言编写的,主要是读取一个名为“雷达图.xlsx”的 Excel 数据表格,并对其进行处理,最终使用自定义函数 plot_radar() 制作雷达图。雷达图是一种多维数据可视化方式,适用于对比多个品牌或者多个方面的表现。在这段代码中,该函数 plot_radar() 接受两个参数:一个是处理后的数据表格 df,另一个是要对比的品牌名称列表 feature。函数会根据品牌名称从数据表格中提取对应的数据,并在雷达图中展示出来。该函数中的很多细节都有详细的注释,比如如何设置字体、颜色、角度等等。最后,该函数还会返回一个 Figure 对象,可以在需要时保存或进一步处理。
帮我完善这段代码 import pandas as pd import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False data = pd.read_excel('汽车性能指标分值统计表.xlsx') data = data.set_index('性能评价指标') data = data.T data.index.name = '品牌' def plot_radar(data, feature): columns = ['动力性', '燃油经济性', '制动性', '操控稳定性', '行驶平顺性', '通过性', '安全性', '环保性', '方便性', '舒适性', '经济性', '容量性'] # 设置要展示的性能评价指标 colors = ['r', 'g', 'y'] # 设置每个品牌在图表中的图例颜色 angles = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(columns), endpoint=False) # 根据要显示的指标个数对圆形进行等分 angles = np.concatenate((angles, [angles[0]])) # 连接刻度线数据 figure = plt.figure(figsize=(6, 6)) ax = figure.add_subplot(1, 1, 1, projection='polar') for i, c in enumerate(feature): #列举 stats = data.loc[c] #stats(统计的缩写) stats = np.concatenate((stats, [stats[0]])) ax.plot(angles, stats, '-', linewidth=2, c=colors[i], label=str(c)) ax.fill(angles, stats, color=colors[i], alpha=0.75) ax.legend(loc=4, bbox_to_anchor=(1.15, -0.07)) ax.set_yticklabels([2, 4, 6, 8, 10]) ax.set_thetagrids(angles * 180 / np.pi, columns, fontsize=12) plt.show() return figure figure = plot_radar(data, ['A品牌', 'B品牌', 'C品牌'])
这段代码是画雷达图,但是有一些可以完善的地方:
1. 可以在函数定义时添加函数说明文档,以便其他人更好地理解函数的作用和参数含义。
2. `plot_radar` 函数的最后一行 `return figure` 可以省略,因为并没有在函数中创建 `figure` 对象。
3. `plot_radar` 函数的参数 `feature` 可以改为更加直观的参数名,例如 `brands`。
4. `plt.show()` 可以放在函数外面,以便更好地控制图表的展示。
修改后的代码如下所示:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_excel('汽车性能指标分值统计表.xlsx')
data = data.set_index('性能评价指标')
data = data.T
data.index.name = '品牌'
def plot_radar(data: pd.DataFrame, brands: list):
"""
画雷达图
:param data: 数据,包含各个品牌在各个性能评价指标上的得分
:param brands: 要展示的品牌列表
:return: None
"""
columns = ['动力性', '燃油经济性', '制动性', '操控稳定性', '行驶平顺性', '通过性', '安全性', '环保性', '方便性', '舒适性', '经济性', '容量性']
colors = ['r', 'g', 'y']
angles = np.linspace(0.1 * np.pi, 2.1 * np.pi, len(columns), endpoint=False)
angles = np.concatenate((angles, [angles[0]]))
figure = plt.figure(figsize=(6, 6))
ax = figure.add_subplot(1, 1, 1, projection='polar')
for i, brand in enumerate(brands):
stats = data.loc[brand]
stats = np.concatenate((stats, [stats[0]]))
ax.plot(angles, stats, '-', linewidth=2, c=colors[i], label=str(brand))
ax.fill(angles, stats, color=colors[i], alpha=0.75)
ax.legend(loc=4, bbox_to_anchor=(1.15, -0.07))
ax.set_yticklabels([2, 4, 6, 8, 10])
ax.set_thetagrids(angles * 180 / np.pi, columns, fontsize=12)
return figure
brands = ['A品牌', 'B品牌', 'C品牌']
figure = plot_radar(data, brands)
plt.show()
```
阅读全文