当前位置:   article > 正文

python图像代码大全,python编程代码图片_python图形代码

python图形代码

大家好,小编来为大家解答以下问题,python图像代码大全,python编程代码图片,现在让我们一起来看看吧!

Source code download: 本文相关源码

数据可视化是数学建模比赛中关键的一步。

同学们在以数据可视化表现某些数据时可以尝试使用 Python 的第三方库学python有用吗

不过有些同学可能会问也会遇到不少问题,比如选择何种图表,以及如何制作,代码如何编写,这些都是问题!

今天给大家介绍几种常见的 Python 数据可视化图表(第一期),总计约 16 个示例~

01. 小提琴图

小提琴图可以将一组或多组数据的数值变量分布可视化。

  1. import seaborn as sns
  2. import matplotlib.pyplot as plt
  3. # 加载数据
  4. df = sns.load_dataset('iris', data_home='seaborn-data', cache=False)
  5. # 绘图显示
  6. sns.violinplot(x=df["species"], y=df["sepal_length"])
  7. plt.show()

02. 核密度估计图

核密度估计图是对直方图的一个拓展。

可以可视化一个或多个组的数值变量的分布,适合大型数据集。

  1. import seaborn as sns
  2. import matplotlib.pyplot as plt
  3. # 加载数据
  4. df = sns.load_dataset('iris', data_home='seaborn-data', cache=False)
  5. # 绘图显示
  6. sns.kdeplot(df['sepal_width'])
  7. plt.show()

结果如下

03. 散点图

散点图,显示两个数值变量之间的关系。

  1. import seaborn as sns
  2. import matplotlib.pyplot as plt
  3. # 加载数据
  4. df = sns.load_dataset('iris', data_home='seaborn-data', cache=False)
  5. # 绘图显示
  6. sns.regplot(x=df["sepal_length"], y=df["sepal_width"])
  7. plt.show()

结果如下

04. 矩形热力图

矩形热力图,矩阵中的每个值都被表示为一个颜色数据。

  1. import seaborn as sns
  2. import pandas as pd
  3. import numpy as np
  4. # 加载数据
  5. df=pd.DataFrame(np.random.random((5,5)),columns=["a","b","c","d","e"])
  6. # Default heatmap
  7. p1 = sns.heatmap(df)

结果如下

05. 相关性图

分析每对数据变量之间的关系

相关性可视化为散点图,对角线用直方图或密度图表示每个变量的分布。

  1. import seaborn as sns
  2. import matplotlib.pyplot as plt
  3. # 加载数据
  4. df = sns.load_dataset('iris', data_home='seaborn-data', cache=True)
  5. # 绘图显示
  6. sns.pairplot(df)
  7. plt.show()

结果如下

06. 气泡图

气泡图本质是一个散点图,其中圆圈大小被映射到第三数值变量的值。

  1. import matplotlib.pyplot as plt
  2. import seaborn as sns
  3. from gapminder import gapminder
  4. # 导入数据
  5. data = gapminder.loc[gapminder.year == 2007]
  6. # 使用 scatterplot 创建气泡图
  7. sns.scatterplot(data=data, x="gdpPercap", y="lifeExp", size="pop", legend=False, sizes=(20, 2000))
  8. # 显示
  9. plt.show()

结果如下

07. 连接散点图

连接散点图就是一个线图,其中每个数据点由圆形或任何类型的标记展示。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import pandas as pd
  4. # 创建数据
  5. df = pd.DataFrame({'x_axis': range(1, 10), 'y_axis': np.random.randn(9) * 80 + range(1, 10)})
  6. # 绘制显示
  7. plt.plot('x_axis', 'y_axis', data=df, linestyle='-', marker='o')
  8. plt.show()

08. 雷达图

雷达图,可以可视化多个定量变量的一个或多个系列的值。

每个变量都有自己的轴,所有轴都连接在图形的中心。

  1. import matplotlib.pyplot as plt
  2. import pandas as pd
  3. from math import pi
  4. # 设置数据
  5. df = pd.DataFrame({
  6. 'group': ['yun', 'ding', 'shu', 'mo'],
  7. 'var1': [38, 1.5, 30, 4],
  8. 'var2': [29, 10, 9, 34],
  9. 'var3': [8, 39, 23, 24],
  10. 'var4': [7, 31, 33, 14],
  11. 'var5': [28, 15, 32, 14]
  12. })
  13. # 目标数量
  14. categories = list(df)[1:]
  15. N = len(categories)
  16. # 角度
  17. angles = [n / float(N) * 2 * pi for n in range(N)]
  18. angles += angles[:1]
  19. # 初始化
  20. ax = plt.subplot(111, polar=True)
  21. # 设置第一个
  22. ax.set_theta_offset(pi / 2)
  23. ax.set_theta_direction(-1)
  24. # 添加背景信息
  25. plt.xticks(angles[:-1], categories)
  26. ax.set_rlabel_position(0)
  27. plt.yticks([10, 20, 30], ["10", "20", "30"], color="grey", size=7)
  28. plt.ylim(0, 40)
  29. # 添加数据图
  30. # 第一个
  31. values = df.loc[0].drop('group').values.flatten().tolist()
  32. values += values[:1]
  33. ax.plot(angles, values, linewidth=1, linestyle='solid', label="yun")
  34. ax.fill(angles, values, 'b', alpha=0.1)
  35. # 第二个
  36. values = df.loc[1].drop('group').values.flatten().tolist()
  37. values += values[:1]
  38. ax.plot(angles, values, linewidth=1, linestyle='solid', label="ding")
  39. ax.fill(angles, values, 'r', alpha=0.1)
  40. # 第三个
  41. values = df.loc[2].drop('group').values.flatten().tolist()
  42. values += values[:1]
  43. ax.plot(angles, values, linewidth=1, linestyle='solid', label="shu")
  44. ax.fill(angles, values, 'r', alpha=0.1)
  45. # 第四个
  46. values = df.loc[3].drop('group').values.flatten().tolist()
  47. values += values[:1]
  48. ax.plot(angles, values, linewidth=1, linestyle='solid', label="mo")
  49. ax.fill(angles, values, 'r', alpha=0.1)
  50. # 添加图例
  51. plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))
  52. # 显示
  53. plt.show()

09. 棒棒糖图

棒棒糖图是柱状图的一种变形,显示一个线段和一个圆。

  1. import matplotlib.pyplot as plt
  2. import pandas as pd
  3. import numpy as np
  4. # 创建数据
  5. df = pd.DataFrame({'group': list(map(chr, range(65, 85))), 'values': np.random.uniform(size=20) })
  6. # 排序取值
  7. ordered_df = df.sort_values(by='values')
  8. my_range = range(1, len(df.index)+1)
  9. # 创建图表
  10. plt.stem(ordered_df['values'])
  11. plt.xticks(my_range, ordered_df['group'])
  12. # 显示
  13. plt.show()

10. 径向柱图

径向柱图同样也是条形图的变形,但是使用极坐标而不是直角坐标系。

  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. # 生成数据
  5. df = pd.DataFrame(
  6. {
  7. 'Name': ['item ' + str(i) for i in list(range(1, 51)) ],
  8. 'Value': np.random.randint(low=10, high=100, size=50)
  9. })
  10. # 排序
  11. df = df.sort_values(by=['Value'])
  12. # 初始化画布
  13. plt.figure(figsize=(20, 10))
  14. ax = plt.subplot(111, polar=True)
  15. plt.axis('off')
  16. # 设置图表参数
  17. upperLimit = 100
  18. lowerLimit = 30
  19. labelPadding = 4
  20. # 计算最大值
  21. max = df['Value'].max()
  22. # 数据下限 10, 上限 100
  23. slope = (max - lowerLimit) / max
  24. heights = slope * df.Value + lowerLimit
  25. # 计算条形图的宽度
  26. width = 2*np.pi / len(df.index)
  27. # 计算角度
  28. indexes = list(range(1, len(df.index)+1))
  29. angles = [element * width for element in indexes]
  30. # 绘制条形图
  31. bars = ax.bar(
  32. x=angles,
  33. height=heights,
  34. width=width,
  35. bottom=lowerLimit,
  36. linewidth=2,
  37. edgecolor="white",
  38. color="#61a4b2",
  39. )
  40. # 添加标签
  41. for bar, angle, height, label in zip(bars,angles, heights, df["Name"]):
  42. # 旋转
  43. rotation = np.rad2deg(angle)
  44. # 翻转
  45. alignment = ""
  46. if angle >= np.pi/2 and angle < 3*np.pi/2:
  47. alignment = "right"
  48. rotation = rotation + 180
  49. else:
  50. alignment = "left"
  51. # 最后添加标签
  52. ax.text(
  53. x=angle,
  54. y=lowerLimit + bar.get_height() + labelPadding,
  55. s=label,
  56. ha=alignment,
  57. va='center',
  58. rotation=rotation,
  59. rotation_mode="anchor")
  60. plt.show()

11. 维恩图

维恩图,显示不同组之间所有可能的关系。

  1. import matplotlib.pyplot as plt
  2. from matplotlib_venn import venn2
  3. # 创建图表
  4. venn2(subsets=(10, 5, 2), set_labels=('Group A', 'Group B'))
  5. # 显示
  6. plt.show()

12. 饼图

饼图将圆划分成一个个扇形区域,每个区域代表在整体中所占的比例。

  1. import matplotlib.pyplot as plt
  2. # 创建数据
  3. size_of_groups = [12, 11, 3, 30]
  4. # 生成饼图
  5. plt.pie(size_of_groups)
  6. plt.show()

13. 折线图

折线图是最常见的图表类型之一。

将各个数据点标志连接起来的图表,用于展现数据的变化趋势。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. # 创建数据
  4. values = np.cumsum(np.random.randn(1000, 1))
  5. # 绘制图表
  6. plt.plot(values)
  7. plt.show()

14. 堆叠面积图

堆叠面积图表示若干个数值变量的数值演变。

每个显示在彼此的顶部,易于读取总数,但较难准确读取每个的值。

  1. import matplotlib.pyplot as plt
  2. # 创建数据
  3. x = range(1, 6)
  4. y1 = [1, 4, 6, 8, 9]
  5. y2 = [2, 2, 7, 10, 12]
  6. y3 = [2, 8, 5, 10, 6]
  7. # 生成图表
  8. plt.stackplot(x, y1, y2, y3, labels=['A', 'B', 'C'])
  9. plt.legend(loc='upper left')
  10. plt.show()

15. 河流图

河流图是一种特殊的流图, 它主要用来表示事件或主题等在一段时间内的变化。

围绕着中心轴显示,且边缘是圆形的,从而形成流动的形状。

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. from scipy import stats
  4. # 添加数据
  5. x = np.arange(1990, 2020)
  6. y = [np.random.randint(0, 5, size=30) for _ in range(5)]
  7. def gaussian_smooth(x, y, grid, sd):
  8. """平滑曲线"""
  9. weights = np.transpose([stats.norm.pdf(grid, m, sd) for m in x])
  10. weights = weights / weights.sum(0)
  11. return (weights * y).sum(1)
  12. # 自定义颜色
  13. COLORS = ["#D0D1E6", "#A6BDDB", "#74A9CF", "#2B8CBE", "#045A8D"]
  14. # 创建画布
  15. fig, ax = plt.subplots(figsize=(10, 7))
  16. # 生成图表
  17. grid = np.linspace(1985, 2025, num=500)
  18. y_smoothed = [gaussian_smooth(x, y_, grid, 1) for y_ in y]
  19. ax.stackplot(grid, y_smoothed, colors=COLORS, baseline="sym")
  20. # 显示
  21. plt.show()

16.地图

适用于地理空间数据分析

  1. import pandas as pd
  2. import folium
  3. # 创建地图对象
  4. m = folium.Map(location=[20, 0], tiles="OpenStreetMap", zoom_start=2)
  5. # 创建图标数据
  6. data = pd.DataFrame({
  7. 'lon': [-58, 2, 145, 30.32, -4.03, -73.57, 36.82, -38.5],
  8. 'lat': [-34, 49, -38, 59.93, 5.33, 45.52, -1.29, -12.97],
  9. 'name': ['Buenos Aires', 'Paris', 'melbourne', 'St Petersbourg', 'Abidjan', 'Montreal', 'Nairobi', 'Salvador'],
  10. 'value': [10, 12, 40, 70, 23, 43, 100, 43]
  11. }, dtype=str)
  12. # 添加信息
  13. for i in range(0,len(data)):
  14. folium.Marker(
  15. location=[data.iloc[i]['lat'], data.iloc[i]['lon']],
  16. popup=data.iloc[i]['name'],
  17. ).add_to(m)
  18. # 保存
  19. m.save('map.html')

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览403587 人正在系统学习中
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/276650
推荐阅读
相关标签
  

闽ICP备14008679号