Python实现数据可视化案例分析
作者:biyezuopinvip 发布时间:2022-09-07 17:58:38
1. 问题描述
对右图进行修改:
请更换图形的风格
请将 x 轴的数据改为-10 到 10
请自行构造一个 y 值的函数
将直方图上的数字,位置改到柱形图的内部垂直居中的位置
对成绩数据 data1402.csv 进行分段统计:每 5 分作为一个分数段,展示出每个分数段的人数直方图。
自行创建出 10 个学生的 3 个学期排名数据,并通过直方图进行对比展示。
线图
把这个图像做一些调整,要求出现 5 个完整的波峰。
调大 cos 波形的幅度
调大 sin 波形的频率
用线图展示北京空气质量数据
展示 10-15 年 PM 指数月平均数据的变化情况,一幅图中有 6 条曲线,每年 1 条曲线。
2. 实验环境
Microsoft Windows 10 版本18363
PyCharm 2020.2.1 (Community Edition)
Python 3.8(Scrapy 2.4.0 + numpy 1.19.4 + pandas 1.1.4 + matplotlib 3.3.3)
3. 实验步骤及结果
对右图进行修改:
请更换图形的风格
请将 x 轴的数据改为-10 到 10
请自行构造一个 y 值的函数
将直方图上的数字,位置改到柱形图的内部垂直居中的位置
from matplotlib import pyplot as plt
import numpy as np
fig, ax = plt.subplots()
plt.style.use('classic')
plt.title("square numbers")
ax.set_xlim(-11, 11)
ax.set_ylim(0, 100)
x = np.array(range(-10, 11))
y = x * x
rect1 = plt.bar(x, y)
for r in rect1:
ax.text(r.get_x(), r.get_height() / 2, r.get_height())
plt.show()
如图使用 classic 风格,x 轴数据为[-10, 10]的整数,构造的函数为 y=x2,显示位置并将其将数值改到了柱形图内部垂直居中的位置。
对成绩数据 data1402.csv 进行分段统计:每 5 分作为一个分数段,展示出每个分数段的人数直方图。
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
df = pd.read_csv("./data1402.csv", encoding='utf-8', dtype=str)
df = pd.DataFrame(df, columns=['score'], dtype=np.float)
section = np.array(range(0, 105, 5))
result = pd.cut(df['score'], section)
count = pd.value_counts(result, sort=False)
fig, ax = plt.subplots()
plt.style.use('classic')
ax.set_xlim(0, 100)
rect1 = plt.bar(np.arange(2.5, 100, 5), count, width=5)
for r in rect1:
ax.text(r.get_x(), r.get_height(), r.get_height())
plt.show()
自行创建出 10 个学生的 3 个学期排名数据,并通过直方图进行对比展示。
import random
semester1 = np.arange(1, 11)
semester2 = np.arange(1, 11)
semester3 = np.arange(1, 11)
random.shuffle(semester1)
random.shuffle(semester2)
random.shuffle(semester3)
df = pd.DataFrame({'semester1':semester1, 'semester2':semester2, 'semester3':semester3})
print(df)
df.to_csv("data1403.csv", encoding="utf-8")
使用如上代码创建出随机的排名数据。
df = pd.read_csv("./data1403.csv", encoding='utf-8', dtype=str)
df = pd.DataFrame(df, columns=['semester1', 'semester2', 'semester3'], dtype=np.int)
df['total'] = (df['semester1'] + df['semester2'] + df['semester3']) / 3
df = df.sort_values('total')
fig, ax = plt.subplots()
plt.style.use('classic')
plt.title('RANK')
width = 0.2
x = np.array(range(0, 10))
rect1 = ax.bar(x-2*width, df['semester1'], width=width, label='semester1')
rect2 = ax.bar(x-width, df['semester2'], width=width, label='semester2')
rect3 = ax.bar(x, df['semester3'], width=width, label='semester3')
for r in rect1:
ax.text(r.get_x(), r.get_height(), r.get_height())
for r in rect2:
ax.text(r.get_x(), r.get_height(), r.get_height())
for r in rect3:
ax.text(r.get_x(), r.get_height(), r.get_height())
plt.legend(ncol=1)
plt.show()
如上代码绘图:
线图 :
把这个图像做一些调整,要求出现 5 个完整的波峰。
调大 cos 波形的幅度
调大 sin 波形的频率
import numpy as np
from matplotlib import pyplot as plt
x = np.linspace(-5 * np.pi, 5 * np.pi, 500)
y1 = 3 * np.cos(x)
y2 = np.sin(4*x)
fig, ax = plt.subplots()
plt.style.use('classic')
ax.spines["right"].set_visible(False)
ax.spines["top"].set_visible(False)
ax.spines['bottom'].set_position(('data',0))
ax.xaxis.set_ticks_position('bottom')
ax.spines['left'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
plt.plot(x, y1, color='blue', linestyle='-', label='y=3cosx')
plt.plot(x, y2, color='red', linestyle='-', label='y=sin3x')
plt.legend()
plt.show()
用线图展示北京空气质量数据
展示 10-15 年 PM 指数月平均数据的变化情况,一幅图中有 6 条曲线,每年 1 条曲线。
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
orig_df = pd.read_csv("./BeijingPM20100101_20151231.csv", encoding='utf-8', dtype=str)
orig_df = pd.DataFrame(orig_df, columns=['year', 'month', 'PM_US Post'])
df = orig_df.dropna(0, how='any')
df['month'] = df['month'].astype(int)
df['year'] = df['year'].astype(int)
df['PM_US Post'] = df['PM_US Post'].astype(int)
df.reset_index(drop=True, inplace=True)
num = len(df)
section = np.arange(1, 13)
record = 0
fig, ax = plt.subplots()
plt.style.use('classic')
plt.title("2010-2015 Beijing average PM2.5(from PM_US Post) per month")
for nowyear in range(2010, 2016):
i = record
result = [0 for i in range(13)]
nowsum = 0
cntday = 0
nowmonth = 1
while i < num:
if df['month'][i] == nowmonth:
cntday = cntday + 1
nowsum = nowsum + df['PM_US Post'][i]
else:
if df['year'][i] != nowyear:
record = i
result[nowmonth] = nowsum / cntday
break
result[nowmonth] = nowsum / cntday
cntday = 1
nowsum = df['PM_US Post'][i]
nowmonth = df['month'][i]
i = i + 1
result = result[1:]
#
x = np.array(range(1, 13))
plt.plot(x, result, linestyle='-', label=str(nowyear))
plt.legend()
plt.show()
来源:https://blog.csdn.net/newlw/article/details/126127393


猜你喜欢
- 前言在写 python 程序的时候,经常会用到引入其他文件夹里的 py 文件,要是都在同目录下直接 import 就好了,可是有的不在同一个
- 如何检测某个对象是否有某个属性?第一想到的——没错,in:"prop" in obj这很完美,不过,还有不少人热衷下面的
- CNN(Convolutional Neural Networks) 卷积神经网络简单讲就是把一个图片的数据传递给CNN,原涂层是由RGB组
- 前言原理:Windows逆向,通过内联汇编的形式调用发消息的函数下面的代码PC微信版本是:3.7.0.26 , python使用的32位的3
- 使用数据库的过程中,由于断电或其他原因,有可能导致数据库出现一些小错误,比如检索某些表特别慢,查询不到符合条件的数据等。出现这些情况的原因,
- *注意:本文的内容涉及到修改NTFS磁盘权限和设置安全策略,请务必在确认您了解操作可能的后果之后再动手进行任何的修改。文中提及的权限都是在原
- 今天在写爬虫程序的时候由于要翻页,做除法分页的时候出现了totalCount = '100' totalPage = int
- 现将几种主要情况进行小结: 一、如何输入NULL值 如果不输入null值,当时间为空时,会默认写入"1900-01-01"
- lighttpd (http://www.djangoproject.com/r/lighttpd/) 是一个轻量级的Web服务器,通常被用
- mysql中写判断语句的方法:方法一.CASE函数case函数语法:CASE conditionWHEN value1 THEN retur
- MySQL Workbench 是一款专为 MySQL 设计的集成化桌面软件,也是下一代的可视化数据库设计、管理的工具,它同时有开源和商业化
- 由于该项目是针对中小学生竞赛并且是第一次举行,所以识别的目标交通标志仅仅只有直行、右转、左转和停车让行。数据集:链接: https://pa
- 1,使用save会在package.json中自动添加。npm install node-sass --save-devnpm instal
- 整个数据获取的信息是通过房源平台获取的,通过下载网页元素并进行数据提取分析完成整个过程导入相关的网页下载、数据解析、数据处理库from fa
- 先来看一道题目:>>> def func(numbers=[], num=1):... numbers.append(nu
- PyCharm最近在用PyCharm的时候运行结果总是在Console里输出,而不是在run输出,下面列出解决方法1.点击工具栏run,再点
- 利用oracle的dbms_random包结合rownum来实现,示例如下,随机取499户:select * from ( select *
- Python 2.x 很快就要 失去官方支持 了,尽管如此,从 Python 2 迁移到 Python 3 却并没有想象中那么难。我在上周用
- 插入代码块使用sum函数:numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]print(sum(number
- 为什么要用python调用matlab?我自己的有些数据结构涉及到hash查找,在python中key是tuple形式,在matlab中支持