当前位置:   article > 正文

Python数学建模与分析——Python高级绘图

Python数学建模与分析——Python高级绘图

        个人学习笔记,课程为Python数学建模与分析:基础入门、数据处理、算法编程、高级绘图、建模实战!

目录

一、折线图

二、密度图

三、小提琴图

四、拟合回归线

五、散点图

六、散点图矩阵

七、直方图

八、箱型图

九、联合分布图


文中引入的csv文件:

链接:https://pan.baidu.com/s/1NWLzgAir70LQKUxv74lfIg?pwd=d2n5 
提取码:d2n5


一、折线图

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import pandas as pd
  4. import seaborn as sns
  5. import matplotlib as mpl
  6. import warnings
  7. warnings.filterwarnings("ignore")
  8. col1 = np. linspace(0, 10,1000)
  9. col2 = np.sin(col1)
  10. df = pd.DataFrame({"C1": col1 ,"C2":col2})
  11. pd.set_option('dispLay.max_columns',None)
  12. print(df.head(10))
  13. # Plotting linepLot using sns.lineplot()
  14. # plt.style.use('seaborn-darkgrid')-----错的
  15. # 使用 Seaborn 设置主题
  16. sns.set_theme(style="darkgrid")#替换
  17. #matplotlib inline
  18. sns.lineplot(x=df.C1,y=df.C2,data=df)
  19. plt.show()
  20. ############################################################################
  21. # 读取数据,不设置特定列为索引
  22. iris = pd.read_csv('E:\pycharm\pyc\iris.data', header=None)
  23. pd.set_option('display.max_columns', None)
  24. # 设置列名
  25. iris.columns = ['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species']
  26. # 打印前10行数据
  27. print(iris.head(10))
  28. # 绘制线图
  29. plt.figure(figsize=(20, 8))
  30. sns.lineplot(data=iris)
  31. plt.show()
  32. # #################################################################
  33. # 选择几个数值列来绘图
  34. plt.figure(figsize=(20,8))
  35. plt.plot(iris['SepalLength'], label='Sepal Length')
  36. plt.plot(iris['SepalWidth'], label='Sepal Width')
  37. plt.plot(iris['PetalLength'], label='Petal Length')
  38. plt.plot(iris['PetalWidth'], label='Petal Width')
  39. plt.legend()
  40. plt.xlabel('Index') # 由于我们没有设置特定的x轴数据,这里使用默认的索引
  41. plt.ylabel('Measurement') # y轴表示测量值
  42. plt.title('Iris Dataset Features') # 图表标题
  43. plt.show()
  44. ############################################################################
  45. plt.figure(figsize=(20, 8))
  46. plt.plot(iris['SepalLength'], label='Sepal Length')
  47. plt.plot(iris['PetalLength'], label='Petal Length')
  48. plt.legend()
  49. plt.xlabel('Index') # x轴代表数据的索引
  50. plt.ylabel('Length (cm)') # y轴代表长度,单位为厘米
  51. plt.title('Iris Dataset - Sepal and Petal Lengths') # 图表标题
  52. plt.show()
  53. # #############################################################无法运行,缺少文件
  54. # employment =pd.read_excel('unemployment.xlsx')
  55. # print(employment.head(10))
  56. # plt.figure(figsize=(14,7))
  57. # plt.style.use('seaborn-darkgrid')
  58. # sns.lineplot(x='Period', y='Unemployed', hue='Gender', data=employment)
  59. # plt.show()
  60. # plt.figure(figsize=(14,7))
  61. # plt.style.use('seaborn-darkgrid')
  62. # sns.lineplot(x='Period', y='Unemployed', hue='Gender', style='Gender', markers=True, dashes=False, data=employment)
  63. # plt.show()
  64. #
  65. # plt.figure(figsize=(14,7))
  66. # plt.style.use('seaborn-darkgrid')
  67. # sns.lineplot(x='Period', y='Unemployed', hue='Gender', style='Gender', err_style='bars', ci=70, data=employment)
  68. # plt.show()
  69. #
  70. # plt.figure(figsize=(14,7))
  71. # plt.style.use('seaborn-darkgrid')
  72. # sns.set(rc={'xtick.labelsize':17,'vtick.labelsize':10,'axes.labelsize':15, 'axes .grid':False})
  73. # sns.lineplot(x='Period', y='Unemployed', hue='Gender', style='Gender',data=employment, dashes=False, palette='CMRmap',markers=['o','>'])
  74. # plt.show()
  75. #
  76. #
  77. # plt.figure(figsize=(14,7))
  78. # plt.style.use('seaborn-darkgrid')
  79. # plt.gcf().text(.2,.84,'GENDER', fontsize=40, color='Black')
  80. # sns.lineplot(x='Period', y='Unemployed', hue='Gender', style='Gender',data=employment, dashes=False, palette='CMRmap',markers=['o','>'])
  81. # plt.show()

二、密度图

  1. import numpy as np
  2. import pandas as pd
  3. import seaborn as sns
  4. import matplotlib as mpl
  5. import warnings
  6. from matplotlib import pyplot as plt
  7. warnings.filterwarnings("ignore")
  8. sns.set_style("white")
  9. names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'class']
  10. iris = pd.read_csv('E:\pycharm\pyc\iris.data', names=names)
  11. # shade=True 表示填充区域下方,cmap='Reds' 设置颜色映射为蓝色系,shade_lowest=True 表示填充最低密度区域
  12. sns.kdeplot(data=iris, x='SepalWidthCm', y='SepalLengthCm', shade=True, cmap='Blues', shade_lowest=True)
  13. plt.show()
  14. # sns.swarmplot 用于绘制分类数据的分布,其中每个类别的值以点云的形式表示。
  15. # figsize 参数控制图形的大小(宽度和高度)。
  16. plt.figure(figsize=(7, 7)) # 创建新的图形窗口
  17. sns.swarmplot(x='class', y='PetalWidthCm', data=iris)
  18. plt.show()

三、小提琴图

  1. import numpy as np
  2. import pandas as pd
  3. import seaborn as sns
  4. import matplotlib as mpl
  5. import warnings
  6. from matplotlib import pyplot as plt
  7. warnings.filterwarnings("ignore")
  8. sns.set_style("white")
  9. names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'class']
  10. iris = pd.read_csv('E:\pycharm\pyc\iris.data', names=names)
  11. # 创建一个新的图形窗口,并设置其大小为7x7英寸
  12. plt.figure(figsize=(7, 7))
  13. # palette='Set2': 这设置了小提琴图的颜色方案,使用了名为'Set2'的调色板。
  14. # dodge=False: 这个参数决定是否将小提琴图的边缘分开。设置为False表示不分开。
  15. sns.violinplot(x="class", y="PetalWidthCm", data=iris, palette='Set2', dodge=False)
  16. plt.show()

四、拟合回归线

  1. import pandas as pd
  2. import seaborn as sns
  3. import matplotlib as mpl
  4. import warnings
  5. from matplotlib import pyplot as plt
  6. warnings.filterwarnings("ignore")
  7. sns.set_style("white")
  8. names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'class']
  9. iris = pd.read_csv('E:\pycharm\pyc\iris.data', names=names)
  10. iris1 = iris[iris['class'].isin(['Iris-setosa', 'Iris-versicolour', 'Iris-virginica'])]
  11. # marker='*': 这个参数指定了散点的标记符号)
  12. sns.regplot(x=iris1.SepalLengthCm, y=iris1.SepalWidthCm, color='#FF6600', marker='*')
  13. plt.show()
  14. #logx=True: 这个参数指定了在 x 轴上使用对数刻度。
  15. #回归线样式:'alpha' 设置了线条的透明度为 0.8,'lw' 设置了线条的宽度为 3。
  16. #sns.lmplot(x='bmi',y='charges', hue='smoker', data=insurance, height=8, aspect=1.2)
  17. #lmplot 是一个强大的工具,可用于快速分析和可视化两个变量之间的关系
  18. sns.regplot(x=iris1.SepalLengthCm, y=iris1.SepalWidthCm, logx=True, line_kws={'color':'#FF5722', 'alpha':0.8, 'lw':3})
  19. plt.show()

五、散点图

  1. # import matplotlib.pyplot as plt
  2. # import numpy as np
  3. # import pandas as pd
  4. # import seaborn as sns
  5. # import matplotlib as mpl
  6. # import warnings
  7. # warnings.filterwarnings("ignore")
  8. # sns.set_style('white')
  9. #
  10. # ######################################################缺少文件,无法运行
  11. # employment = pd.read_excel(r'D:\桌面\shumo\newdata\data\unemployment-rate-1948-2010.xls')
  12. # sns.relplot(x='Period', y='value', hue='Gender', data=employment, height=7, aspect=2)
  13. # plt.show()
  14. #
  15. #
  16. # insurance =pd.read_csv('insurance.csv')
  17. # print(insurance.head(10))
  18. # sns.relplot(x='bmi',y='charges', hue='smoker',data=insurance,height=8,aspect=1)
  19. # plt.show()
  20. # sns.relplot(x='Period', y='Unemployed', hue='Gender', col='Age', kind='line',data=employment,height=6, aspect=1,col_wrap=4,linewidth=2)
  21. # plt.show()
  22. #
  23. # sns.relplot(x='bmi',y='charges',hue='sex',col='sex',row='region',data=insurance,height=8,aspect=1)
  24. # plt.show()
  25. #
  26. # sns.relplot(x='bmi', y='charges', hue='sex', col='sex', row='region',data=insurance,height=7,aspect=.6)
  27. # plt.show()
  28. import numpy as np
  29. import pandas as pd
  30. import seaborn as sns
  31. import warnings
  32. import matplotlib.pyplot as plt
  33. warnings.filterwarnings("ignore")
  34. sns.set_style("white")
  35. # 读取CSV文件
  36. employment = pd.read_csv('E:\pycharm\pyc\housing.csv')
  37. # 绘制关系图
  38. # 假设我们想要探索房价(MEDV)与房屋年龄(AGE)之间的关系,并根据房间数(RM)来区分颜色
  39. sns.relplot(x='AGE', y='MEDV', hue='RM', data=employment, height=7, aspect=2)
  40. plt.show()
  41. """
  42. # 使用seaborn的relplot函数绘制关系图
  43. # 注意:以下参数和注释已经根据实际的代码和数据集进行了调整
  44. sns.relplot(
  45. x='AGE', # x轴上的数据列名,这里是房屋年龄
  46. y='MEDV', # y轴上的数据列名,这里是中位数房价
  47. hue='RM', # 根据这个列的值来区分不同的颜色,这里是房间数
  48. # col='Age', # 这行被注释掉了,因为原始数据中没有'Age'列,且'col'参数不能重复指定
  49. # kind='line', # 这行也被注释掉了,因为relplot默认是散点图,且对于AGE和MEDV的关系,散点图更合适
  50. # col='sex', # 这行被注释掉了,因为原始数据中没有'sex'列
  51. # row='region', # 这行被注释掉了,因为原始数据中没有'region'列
  52. data=employment, # DataFrame的名称,这里包含波士顿房价数据的DataFrame名为employment
  53. height=7, # 每个子图的高度(英寸),这里保持为7
  54. aspect=2, # 子图的宽高比,这里设置为2
  55. # col_wrap=4, # 这行被注释掉了,因为没有使用col参数来创建子图
  56. # linewidth=2, # 这行也被注释掉了,因为默认绘制的是散点图,不是折线图
  57. ) # 注意这里添加了闭合的括号
  58. """

六、散点图矩阵

  1. import pandas as pd
  2. import seaborn as sns
  3. import matplotlib as mpl
  4. import warnings
  5. from matplotlib import pyplot as plt
  6. warnings.filterwarnings("ignore")
  7. sns.set_style("white")
  8. names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'class']
  9. iris = pd.read_csv('E:\pycharm\pyc\iris.data', names=names)
  10. print(iris.head())
  11. # 从原始的 iris 数据集中筛选出包含 'Iris-setosa'、'Iris-versicolour' 和 'Iris-virginica' 类别的数据
  12. iris1 = iris[iris['class'].isin(['Iris-setosa', 'Iris-versicolour', 'Iris-virginica'])]
  13. sns.pairplot(iris1, hue='class', palette='husl', size=2) # size=2 设置了每个子图的大小
  14. # vars=['SepalLengthCm','SepalWidthCm','PetalLengthCm']: 这个参数指定了要在散点图矩阵中展示的特征列
  15. # height=3: 这个参数设置了每个子图的高度为 3。
  16. # aspect=1: 这个参数设置了每个子图的宽高比为 1,即正方形。
  17. sns.pairplot(iris1,hue='class',vars=['SepalLengthCm','SepalWidthCm','PetalLengthCm'],height=3, aspect=1)
  18. plt.show()

七、直方图

  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. import pandas as pd
  4. import seaborn as sns
  5. import matplotlib as mpl
  6. import warnings
  7. warnings.filterwarnings("ignore")
  8. # 基本知识
  9. # 生成一个正态分布的随机数组,均值为1,标准差为10,样本数量为1000
  10. mpl.rcParams.update(mpl.rcParamsDefault)
  11. num = np.random.normal(1,10,1000)
  12. sns.distplot(num)
  13. plt.show()
  14. sns.displot(num, kde=False) # 直方图,不带KDE 没有核密度估计
  15. plt.show()
  16. sns.displot(num, kde=True) # 直方图,不带KDE 有核密度估计
  17. plt.show()
  18. housing = pd.read_csv('E:\pycharm\pyc\housing.csv')
  19. print(housing.head())
  20. plt.show()
  21. # bins=40:这个参数表示将数据分成40个区间
  22. # figsize=(20,20):这个参数设置图形的大小 单位是英寸
  23. housing.hist(bins=40, figsize=(20, 20))
  24. plt.show()
  25. #多个图 三行三列
  26. fig1 ,axes = plt.subplots(nrows=3,ncols=3 ,figsize = (20,20))
  27. #ax=axes[0, 0]: 这指定了要在哪个子图上绘制直方图。axes是一个二维数组,代表多个子图,这里我们选择了第一个子图(索引为[0, 0])
  28. #kde=False: 这个参数决定是否在直方图上绘制核密度估计曲线。设置为False表示不绘制。
  29. sns.distplot(housing["CRIM"], color="#00bcd4",ax=axes[0, 0] , kde=False , bins=20)
  30. sns.distplot(housing["ZN"], color="#937d14",ax=axes[0, 1], kde=False ,bins=20)
  31. sns.distplot(housing["INDUS"], color="#006600", ax=axes[0, 2],kde=False, bins=20)
  32. sns.distplot(housing["CHAS"] , color="#ff1e56", ax=axes[1,0], kde=False ,bins=20)
  33. sns.distplot(housing["NOX"],color="#216353",ax=axes[1, 1], kde=False,bins=20)
  34. sns.distplot(housing["RM"], color="#FF8F00", ax=axes[1,2],kde=False ,bins=20)
  35. sns.distplot(housing["AGE"], color="#33FF00", ax=axes[2, 0], kde=False,bins=20)
  36. sns.distplot(housing["DIS"], color="#FF3300", ax=axes[2, 1], kde=False,bins=20)
  37. sns.distplot(housing["RAD"], color="#cccc00", ax=axes[2, 2],kde=False,bins=20)
  38. plt.show()

八、箱型图

  1. import numpy as np
  2. import pandas as pd
  3. import seaborn as sns
  4. import matplotlib as mpl
  5. import warnings
  6. from matplotlib import pyplot as plt
  7. warnings.filterwarnings("ignore")
  8. sns.set_style("white")
  9. housing = pd.read_csv('E:\pycharm\pyc\housing.csv')
  10. """
  11. sns.boxplot(x=insurance.smoker, y=insurance.charges, orient=['no', 'yes']): 这行代码绘制了一个分组的箱线图,
  12. 展示了不同吸烟者类别('no'和'yes')下的健康保险费用分布情况。其中,x参数指定了分组依据的列(即吸烟者类别),
  13. y参数指定了要展示的数据列(即健康保险费用),orient参数指定了分组的方向(这里设置为['no', 'yes'])。
  14. """
  15. sns.boxplot(housing.B) #展示housing.csv中B列的箱线图
  16. plt.show()

九、联合分布图

  1. import pandas as pd
  2. import seaborn as sns
  3. import matplotlib as mpl
  4. import warnings
  5. from matplotlib import pyplot as plt
  6. warnings.filterwarnings("ignore")
  7. sns.set_style("white")
  8. names = ['SepalLengthCm', 'SepalWidthCm', 'PetalLengthCm', 'PetalWidthCm', 'class']
  9. iris = pd.read_csv('E:\pycharm\pyc\iris.data', names=names)
  10. # kind='reg' 参数表示在图中添加一个回归线
  11. # edgecolor='w'参数表示散点的边框颜色为白色。
  12. # s=90参数表示散点的大小为90
  13. # kind='hex'
  14. sns.jointplot(x='SepalLengthCm', y='SepalWidthCm', data=iris, height=10, kind='reg', color='#FF6600')
  15. plt.show()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/854936
推荐阅读
相关标签
  

闽ICP备14008679号