Pygal
将使用Python的可视化包Pygal来生成可缩放的矢量图形文件
安装:
pip install pygal -i https://pypi.tuna.tsinghua.edu.cn/simple
案例:
import pygal
py_bar = pygal.Bar()
py_bar.add("大标题",[1,3,3,7])
py_bar.add('小标题',[1,6,6,4])
py_bar.render_to_file("s.svg")
按F3后打开
掷色子
from random import randint
class Die():
'''表示一个色子的类'''
def __init__(self,num_sides = 6):
'''色子默认位6面'''
self.num_sides = num_sides
def roll(self):
'''返回一个位于1和色子之间的随机值'''
return randint(1,self.num_sides)
from 演示代码.die import Die
#创建一个色子
die = Die()
#掷几次色子,并且将结果存储在一个列表中
results = []
for roll in range(100):
r = die.roll()
results.append(r)
print(results)
[2, 2, 1, 6, 1, 5, 2, 1, 6, 3, 4, 1, 3, 5, 1, 3, 6, 4, 5, 1, 2, 6, 4, 6, 4, 2, 4, 3, 4, 2, 5, 2, 4...]
分析点数概率并且绘制直方图
from 演示代码.die import Die
import pygal
#创建一个色子
die = Die()
#掷几次色子,并且将结果存储在一个列表中
results = []
for roll in range(1000):
r = die.roll()
results.append(r)
print(results)
#分析结果
frequencies = []
for value in range(1,die.num_sides+1):
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
#对结果进行可视化
hist = pygal.Bar()
hist.title = '掷色子1000次的结果'
hist.x_labels = ['1','2','3','4','5','6']
hist.x_title = 'Result'
hist.y_title = '概率'
hist.add('D6',frequencies)
hist.render_to_file('die_visual.svg')
模拟扔两个色子
from 演示代码.die import Die
import pygal
#创建两个色子
die_1 = Die()
die_2 = Die()
#掷几次色子,并且将结果存储在一个列表中
results = []
for roll in range(1000):
r = die_1.roll()+ die_2.roll()
results.append(r)
print(results)
#分析结果
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2,max_result+1):
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
#对结果进行可视化
hist = pygal.Bar()
hist.title = '掷色子1000次的结果'
hist.x_labels = [i for i in range(2,max_result+1)]
hist.x_title = 'Result'
hist.y_title = '概率'
hist.add('D6 + D6',frequencies)
hist.render_to_file('diec_visual.svg')
生成两个不同面数的色子
from 演示代码.die import Die
import pygal
#创建两个色子
die_1 = Die()
die_2 = Die(10)
#掷几次色子,并且将结果存储在一个列表中
results = []
for roll in range(50000):
r = die_1.roll()+ die_2.roll()
results.append(r)
print(results)
#分析结果
frequencies = []
max_result = die_1.num_sides + die_2.num_sides
for value in range(2,max_result+1):
frequency = results.count(value)
frequencies.append(frequency)
print(frequencies)
#对结果进行可视化
hist = pygal.Bar()
hist.title = '掷色子50000次的结果'
hist.x_labels = [i for i in range(2,max_result+1)]
hist.x_title = 'Result'
hist.y_title = '概率'
hist.add('D6 + D10',frequencies)
hist.render_to_file('different_die_visual.svg')
CSV文件格式
import csv
filename = 'Python-sitka_weather_2014.csv'
with open(filename) as f:
#调用reader()函数,将f对象作为参数传递给它,从而创建一个与该文件相关联的阅读器对象
reader = csv.reader(f)
#返回文件中的下一行
header_row = next(reader)
print(header_row)
# for index, column_header in enumerate(header_row):
# print(index, column_header)
highs = []
for row in reader:
highs.append(row[1])
print(highs)
['AKST', 'Max TemperatureF', 'Mean TemperatureF', 'Min TemperatureF', 'Max Dew PointF', 'MeanDew PointF', 'Min DewpointF', 'Max Humidity', ' Mean Humidity', ' Min Humidity', ' Max Sea Level PressureIn'...
['46', '41', '39', '43', '44', '44', '44', '44', '41', '39', '36', '43', '48', '48', '48', '51', '55', '48', '45', '46', '54', '54', '55', '48', '46', '46', '55', '44', '43', '42', '37', '39', '42', '37', '34', '35', '32', '36', '33', '28', '32', '28', '33', '36', '39', '44', '37', '37', '39', ...
根据数据绘制图形
import csv
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
filename = 'Python-sitka_weather_2014.csv'
with open(filename) as f:
# 调用reader()函数,将f对象作为参数传递给它,从而创建一个与该文件相关联的阅读器对象
reader = csv.reader(f)
# 返回文件中的下一行
header_row = next(reader)
# print(header_row)
# for index, column_header in enumerate(header_row):
# print(index, column_header)
highs = []
for row in reader:
# 使用int()将字符串转换为数字,让matplotlib能够读取它们
high = int(row[1])
highs.append(high)
print(highs)
# 根据数据绘制图形
fig = plt.figure(dpi=128, figsize=(16, 9))
plt.plot(highs, c='red')
# 设置图形格式
plt.title('2014年最高气温', fontsize=24)
plt.xlabel('', fontsize=16)
plt.ylabel('最高气温', fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)
plt.show()
增加日期
import csv
from matplotlib import pyplot as plt
from datetime import datetime
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
filename = 'Python-sitka_weather_2014.csv'
with open(filename) as f:
# 调用reader()函数,将f对象作为参数传递给它,从而创建一个与该文件相关联的阅读器对象
reader = csv.reader(f)
# 返回文件中的下一行
header_row = next(reader)
# print(header_row)
dates, highs = [], []
for row in reader:
current_date = datetime.strptime(row[0], "%Y/%m/%d")
dates.append(current_date)
print(current_date)
# 使用int()将字符串转换为数字,让matplotlib能够读取它们
high = int(row[1])
highs.append(high)
print(highs)
# 根据数据绘制图形
fig = plt.figure(dpi=128, figsize=(16, 9))
plt.plot(dates, highs, c='red')
# 设置图形格式
plt.title('2014年最高气温', fontsize=24)
plt.xlabel('', fontsize=16)
# 绘制斜线标签
fig.autofmt_xdate()
plt.ylabel('最高气温', fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)
# plt.show()
plt.savefig('hish.png')
设置最高气温和最低气温
import csv
from matplotlib import pyplot as plt
from datetime import datetime
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
filename = 'Python-sitka_weather_2014.csv'
with open(filename) as f:
# 调用reader()函数,将f对象作为参数传递给它,从而创建一个与该文件相关联的阅读器对象
reader = csv.reader(f)
# 返回文件中的下一行
header_row = next(reader)
# print(header_row)
dates, highs, lows = [], [], []
for row in reader:
current_date = datetime.strptime(row[0], "%Y/%m/%d")
dates.append(current_date)
print(current_date)
# 使用int()将字符串转换为数字,让matplotlib能够读取它们
high = int(row[1])
highs.append(high)
low = int(row[3])
lows.append(low)
print(highs)
# 根据数据绘制图形
fig = plt.figure(dpi=128, figsize=(16, 9))
plt.plot(dates,highs,c='red',alpha=0.5)
plt.plot(dates,lows,c='blue',alpha=0.5)
plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.1)
# 设置图形格式
plt.title('2014年最高气温和最低气温', fontsize=24)
plt.xlabel('', fontsize=16)
#绘制斜线标签
fig.autofmt_xdate()
plt.ylabel('最高气温', fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)
# plt.show()
plt.savefig('hish.png')