#2012-2013年犯罪未遂数量折线图 import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode_minus']=False #数据收集 x=np.arange(2012,2024) y1=np.array([20,39,855,1078,802,696,728,681,735,668,86,1]) y2=np.array([15,18,399,601,371,325,285,175,134,26,1,0]) #绘制折线图 plt.plot(x,y1) plt.plot(x,y2) plt.title("2012-2023年云南省及昆明市刑事案件犯罪未遂数量折线图") #坐标轴 plt.xlabel("时间") plt.ylabel("数量") #网格 plt.grid(linewidth=0.3) #图例 lines=plt.plot(x,y1,x,y2) plt.legend(lines,['云南省','昆明市'],shadow=True) #参考线(平均值) plt.axhline(y=532,linestyle="--",color="red") #指向性注释文本 plt.annotate("最大值", # 注释的标签内容 xy=(2015,1078), # 要被注释的地方位置坐标 xytext=(2016,1100), # 注释文本的位置 weight="bold", # 注释文本字体粗细 color='g', arrowprops= dict(arrowstyle='->', connectionstyle='arc3, rad=0.2', color='g') # 指向注释点的箭头属性 ) #数据标记 plt.plot([2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023],[3,39,855,1078,802,696,728,681,735,668,86,1],marker='o') plt.plot([2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023],[15,18,399,601,371,325,285,175,134,26,1,0],marker='o') plt.show() 为什么图形和图例颜色不同
时间: 2023-09-19 12:05:55 浏览: 137
在这个修改后的代码中,绘制两个折线图时分别使用了不同的 `plt.plot()` 指定了线条样式的颜色,因此第一个折线图和图例的颜色是蓝色,第二个折线图和图例的颜色是橙色。同时,在 `plt.legend()` 中指定了每个标签对应的颜色,使得图例颜色和折线图颜色对应。因此,图形和图例颜色不同是因为它们对应的颜色不同。
相关问题
这段代码中是否有错误import time import numpy as np import xlrd import matplotlib.pyplot as plt import pyecharts.options as opts from pyecharts.charts import Line import datetime for j in range(0,5): # 获取文件并读取数据 data = xlrd.open_workbook_xls('歌手热门前十歌曲基本信息.xls') table = data.sheets()[j] geshou = table.row_values(0)[0] names1 = [] # 歌曲名 times = [] # 发布时间 for i in range(7, 17): name = table.row_values(i)[0] # time1 = time.strptime(table.row_values(i)[3],"%y %b %d") time1 = int(table.row_values(i)[3].replace("-", "")) #print(time1) names1.append(name) times.append(time1) # print(names1) # print(times) # print(geshou) # 定义画布大小 # fig = plt.figure(figsize=(5,8)) plt.rcParams["font.sans-serif"] = "SimHei" # 解决中文乱码 # 将格式转为flot浮点型 # 画线 plt.plot(names1, times, label='歌曲发布时间', marker='D', color='green') # X、Y轴刻度标签 plt.xlabel('发布时间') plt.ylabel('歌曲名') plt.xticks(rotation=45) # 图表题 plt.title('歌手<'+geshou+'>歌曲发布时间图') # 折现说明 plt.legend() plt.show()
这段代码中没有明显的语法错误,但是可能存在以下问题:
1. pyecharts 依赖库需要单独安装,如果没有安装会导致代码运行出错。可以在命令行中使用 pip install pyecharts 安装。
2. 循环变量 j 没有在代码中使用,可能是多余的。
3. 画线时,X轴和Y轴的标签可能颠倒了,应该将 `plt.xlabel('发布时间')` 改为 `plt.xlabel('歌曲名')`,将 `plt.ylabel('歌曲名')` 改为 `plt.ylabel('发布时间')`。
4. 折线图的横坐标应该是时间,而不是歌曲名,可以尝试使用 `dates.date2num()` 将时间字符串转换为 matplotlib 中的日期格式,再进行绘图。
希望这些提示可以帮助你进一步完善代码。
调试并运行下述案例代码,给代码做注释。在此基础上补充票房 TOP10 的柱状 图展示。 import pandas as pd import numpy as np from matplotlib import pyplot as plt from matplotlib.ticker import MultipleLocator datas = pd.read_csv(r'2015-2020.txt', index_col=0) datas = datas.sort_index(ascending=False) datas = pd.DataFrame(datas.values, index=range(1, 11), \ columns=datas.columns) data2020 = pd.read_csv(r'2020.txt') def drawLines(): ax = plt.subplot(131) for date in datas.columns: plt.plot([10 - i for i in range(datas.shape[0])], \ datas[date], label=date) plt.ylim(0, 600000) ymajorLocator = MultipleLocator(50000) xmajorLocator = MultipleLocator(1) ax.yaxis.set_major_locator(ymajorLocator) ax.xaxis.set_major_locator(xmajorLocator) plt.title('2015-2020 年度票房 Top10 折线图') plt.xlabel('票房名次') plt.grid() plt.legend() def drawPie(): plt.subplot(233) plt.pie(datas['2019'], autopct='%1.1f%%') plt.title('2019 年度票房 Top10 饼图') plt.subplot(236) plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['font.family'] = 'sans-serif' plt.pie(data2020['boxoffice'], autopct='%1.1f%%', \ labels=data2020['name']) plt.title('2020 年度票房 Top10 饼图') if __name__ == '__main__': plt.subplots(figsize=(20, 8)) drawLines() drawPie() plt.show()
```python
# 导入 pandas, numpy, pyplot 和 MultipleLocator 库
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.ticker import MultipleLocator
# 读取数据并按照时间降序排序
datas = pd.read_csv(r'2015-2020.txt', index_col=0)
datas = datas.sort_index(ascending=False)
# 将数据转换为 DataFrame 格式,索引是票房排名,列是年份
datas = pd.DataFrame(datas.values, index=range(1, 11), columns=datas.columns)
# 读取 2020 年数据
data2020 = pd.read_csv(r'2020.txt')
# 绘制 2015-2020 年度票房 Top10 折线图
def drawLines():
ax = plt.subplot(131) # 创建子图
for date in datas.columns: # 循环每年的票房数据
plt.plot([10 - i for i in range(datas.shape[0])], datas[date], label=date) # 绘制折线图
plt.ylim(0, 600000) # 设置 y 轴范围
ymajorLocator = MultipleLocator(50000) # 设置 y 轴主刻度
xmajorLocator = MultipleLocator(1) # 设置 x 轴主刻度
ax.yaxis.set_major_locator(ymajorLocator) # 设置 y 轴主刻度
ax.xaxis.set_major_locator(xmajorLocator) # 设置 x 轴主刻度
plt.title('2015-2020 年度票房 Top10 折线图') # 设置标题
plt.xlabel('票房名次') # 设置 x 轴标签
plt.grid() # 显示网格线
plt.legend() # 显示图例
# 绘制 2019 年度票房 Top10 饼图和 2020 年度票房 Top10 饼图
def drawPie():
plt.subplot(233) # 创建子图
plt.pie(datas['2019'], autopct='%1.1f%%') # 绘制饼图
plt.title('2019 年度票房 Top10 饼图') # 设置标题
plt.subplot(236) # 创建子图
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置字体
plt.rcParams['font.family'] = 'sans-serif'
plt.pie(data2020['boxoffice'], autopct='%1.1f%%', labels=data2020['name']) # 绘制饼图
plt.title('2020 年度票房 Top10 饼图') # 设置标题
if __name__ == '__main__':
plt.subplots(figsize=(20, 8)) # 创建画布
drawLines() # 绘制折线图
drawPie() # 绘制饼图
plt.show() # 显示图形
```
补充票房 TOP10 的柱状图展示如下:
```python
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
# 读取数据并按照时间降序排序
datas = pd.read_csv(r'2015-2020.txt', index_col=0)
datas = datas.sort_index(ascending=False)
datas = pd.DataFrame(datas.values, index=range(1, 11), columns=datas.columns)
# 绘制柱状图
plt.subplots(figsize=(20, 8))
plt.bar(datas.index, datas['2020'])
plt.xticks(datas.index, datas.index)
plt.title('2020 年度票房 Top10 柱状图')
plt.xlabel('票房排名')
plt.ylabel('票房(万元)')
plt.show()
```
柱状图展示如下:
注意:柱状图只显示了 2020 年的数据。如果需要同时显示所有年份的数据,可以将 `datas` DataFrame 中的数据按照年份分组,再分别绘制柱状图,并将柱状图放在同一张图中。
阅读全文