import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 读取本地Excel文件  ,使用绝对路径
file_path = r'I:\Documents\【论文】\20240500-\test_for_Python.xlsx' 
df = pd.read_excel(file_path, sheet_name='Sheet4' ) 

x_axis_max=df.shape[0] #获取最大行数
y_axis_max=df.shape[1] #获取最大列数

x = df.iloc[0:x_axis_max, 0] #建立数组1
y = df.iloc[0:x_axis_max, 1] #建立数组2

print("请检查工作表的前5列")
print(x[:5])
print("请检查工作表的后5列")
print(x[-5:])

column1 = df.columns[0]  #行标签1,以后做x轴
column2 = df.columns[1]  #行标签2,以后做y轴

# 确定数据中的最大值、最小值
x_max = np.max(x) 
x_min = np.min(x)
y_max = np.max(y)
y_min = np.min(y)
print(f"列{column1}的最大值是{x_max},最小值是{x_min};\n列{column2}的最大值是{y_max},最小值是{y_min}")







# 绘制散点图
plt.figure(1)#用于创建一个图形窗口(或“图”)并设置其编号
plt.figure(figsize=(7,6))#图像尺寸

plt.scatter(x,y,s=5,c="hotpink",alpha=0.6,marker="o")
    # x, y → 散点的坐标
    # s → 散点的面积
    # c → 散点的颜色(默认值为蓝色,'b',其余颜色同plt.plot( ))
    # alpha → 散点透明度([0, 1]之间的数,0表示完全透明,1则表示完全不透明)
    # marker → 散点样式(默认值为实心圆,'o',其余样式同plt.plot( ))
    # linewidths →散点的边缘线宽,默认none
    # edgecolors → 散点的边缘颜色
plt.xlabel(column1)
plt.ylabel(column2)
#plt.savefig('1.png',dpi=600) 
    # 将当前活动图形保存为一个名为 '1.png' 的 PNG 图像文件,并使用 600 DPI 的分辨率
    # 如果你想把文件保存在不同的位置,你可以在 plt.savefig() 中指定完整的文件路径,包括文件夹名和文件名。
    # 例如:plt.savefig('/path/to/your/directory/文件名.png')


    
    
    
    
    
#绘制六边形分箱图
plt.figure(2)
plt.figure(figsize=(7,6))

#plt.xlim((0,0.3))#设置x坐标轴范围
plt.ylim((0,50))#设置y坐标轴范围
plt.xlim((150,820))#设置x坐标轴范围
#plt.ylim((0,2.5))#设置y坐标轴范围
#plt.xlim((0,50))#设置x坐标轴范围
#plt.ylim((0,2.5))#设置y坐标轴范围
#plt.ylim((0,50))




plt.hexbin(x,y,gridsize=20,cmap='afmhot_r',linewidths=0)
    # x, y:这些参数是数据序列。 x和y的长度必须相同。
    # cmap:设置颜色映射,用于将数据点的数量映射为不同的颜色。https://matplotlib.org/stable/users/explain/colors/colormaps.html
    # gridsize:设置六边形格子的大小,用于调整数据点分布的精度。
    # xscale:此参数在水平轴上使用线性或对数刻度。
    # xycale:此参数在垂直轴上使用线性或log10标度。
    # mincnt:此参数用于显示单元格中具有最少点数的单元格。
    # marginals::此参数用于沿x轴底部和y轴左侧绘制颜色映射为矩形的边际密度。
    # extent:此参数是箱子的极限。
plt.colorbar() 
plt.xlabel(column1)
plt.ylabel(column2)
plt.savefig('2.svg',dpi=600)


plt.figure(3)
plt.figure(figsize=(7,6))
#plt.xlim((150,820))#设置x坐标轴范围
#plt.ylim((0,2.5))#设置y坐标轴范围
plt.hexbin(x,y,gridsize=20,cmap='Greys')
plt.colorbar() 
plt.xlabel(column1)
plt.ylabel(column2)
#plt.savefig('3.svg',dpi=600)