python 画散点密度图,设置图例,标题等细节

最初接触python画图的时候,这个散点密度图也是经历了一波三折才做出来。
直接给一个画图的代码,方便有需要的同学做个参考

from statistics import mean
import matplotlib
import matplotlib.pyplot as plt
plt.ion()
from collections import defaultdict
from pandas import set_option
from operator import itemgetter
from sklearn.metrics import explained_variance_score,r2_score,median_absolute_error,mean_squared_error,mean_absolute_error
from matplotlib.colors import LogNorm
from scipy.stats import gaussian_kde
from scipy import stats

def scatter_out_1(x, y, title_name, savename): ## x,y为两个需要做对比分析的两个量。
    # ==========计算评价指标==========
    BIAS = mean(x - y)
    MSE = mean_squared_error(x, y)
    RMSE = np.power(MSE, 0.5)
    R2 = r2_score(x, y)
    MAE = mean_absolute_error(x, y)
    EV = explained_variance_score(x, y)

    print('==========算法评价指标===
<think>好的,用户想了解如何使用Python的Matplotlib和Seaborn绘制美观的散点图。首先,我需要回忆这两个库的基本用法和美化技巧。记得Matplotlib是基础库,而Seaborn基于它,提供了更高级的接口和默认的美观样式。 用户提到了示例代码,所以应该提供具体的代码示例。先整理安装步骤,虽然用户可能已经安装,但作为教程,最好包含安装命令。比如用pip安装Matplotlib和Seaborn。 接下来,基础绘图部分。使用Matplotlib的scatter函数,需要导入pyplot,生成数据,然后设置标题、标签等。这部分比较基础,但需要展示如何调整颜色、透明度等参数,比如alpha和cmap参数。 然后是Seaborn的部分。Seaborn的scatterplot函数可以自动应用样式,比如设置背景颜色,使用hue参数分组数据。可能需要展示如何用sns.set设置主题,比如用rc参数调整背景色,这样图表看起来更专业。 美化技巧方面,包括调整点的大小、颜色映射、添加图例和注释。例如,使用color_palette选择调色板,添加标题的字体大小,调整坐标轴标签的可读性。此外,可能需要提到使用plt.grid()来添加网格线,但线条应该浅色以免干扰数据。 示例代码部分需要完整,包括数据生成或导入的部分。如果用户的数据来自文件,可以提示使用pandas读取,但这里可能用随机数据生成更简单。比如用numpy生成随机数,然后分组成不同的簇。 还要注意代码的注释,让用户明白每一步的作用。比如设置背景颜色,hue参数的使用,以及添加图例的位置调整。最后,展示如何保存图片,比如用plt.savefig导出高清图片。 相关问题部分,需要涵盖常见的问题,比如颜色映射调整、分组绘制、三维散点图、动态效果、与Pandas结合以及导出高清图。这些问题可以帮助用户进一步探索相关功能。 检查是否有遗漏的步骤,比如导入必要的库,确保代码可运行。同时,确认引用正确,用户提供的引用中有关于Seaborn设置背景色的例子,需要正确标注引用来源。 最后,确保回答结构清晰,分步骤讲解,代码示例正确,并且美观建议实用,能够帮助用户提升图表的质量。</think>以下是使用Matplotlib和Seaborn绘制美观散点图的详细步骤及示例代码: ### 一、环境准备 ```python # 安装库(若未安装) # !pip install matplotlib seaborn ``` ### 二、基础绘图方法 #### 1. Matplotlib基础版 ```python import matplotlib.pyplot as plt import numpy as np # 生成测试数据 x = np.random.randn(300) y = x * 2 + np.random.normal(0, 1, 300) plt.scatter(x, y, s=40, # 点大小 alpha=0.6, # 透明度 c='#4CAF50', # 颜色 edgecolor='w') # 边缘色 plt.title("基础散点图示例", fontsize=14) plt.xlabel("特征X", fontsize=12) plt.ylabel("特征Y", fontsize=12) plt.grid(alpha=0.3) # 添加浅色网格线 plt.show() ``` #### 2. Seaborn优化版 ```python import seaborn as sns # 设置全局样式[^2] sns.set(style="whitegrid", rc={"axes.facecolor":"#F8F8F8", "grid.color":".8", "font.family":"Microsoft YaHei"}) # 生成分类数据 data = sns.load_dataset("iris") # 绘制高级散点图 ax = sns.scatterplot( data=data, x="sepal_length", y="petal_length", hue="species", # 按品种分组着色 palette="husl", # 使用husl调色板 size="sepal_width", # 按萼片宽度调整点大小 sizes=(20, 200), # 尺寸范围 edgecolor="black", # 边缘线 linewidth=0.5 ) # 添加图注 plt.legend(title='鸢尾花品种', bbox_to_anchor=(1.05, 1)) ax.set_title("鸢尾花特征分布", pad=20, fontsize=16) plt.tight_layout() ``` ### 三、六大美化技巧 1. **颜色映射优化**:使用`cmap`参数实现渐变效果 ```python plt.scatter(x, y, c=y, cmap='viridis', s=50) plt.colorbar(label='数值强度') ``` 2. **分组绘制技巧**:通过循环实现多组绘制 ```python categories = np.random.choice(['A','B','C'], 300) for cat in ['A','B','C']: mask = categories == cat plt.scatter(x[mask], y[mask], label=cat, alpha=0.7) plt.legend() ``` 3. **动态可视化**:添加交互效果 ```python from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.scatter(x, y, np.random.randn(300), depthshade=True) ``` ### 四、完整案例 ```python # 生成模拟数据 np.random.seed(42) data_size = 500 cluster_data = { "X": np.concatenate([np.random.normal(0, 1, data_size), np.random.normal(5, 1, data_size)]), "Y": np.concatenate([np.random.normal(0, 1, data_size), np.random.normal(3, 1, data_size)]), "Group": ["Cluster1"]*data_size + ["Cluster2"]*data_size } # 高级可视化 plt.figure(figsize=(10,6)) sns.scatterplot( data=cluster_data, x="X", y="Y", hue="Group", style="Group", palette={"Cluster1":"#E74C3C", "Cluster2":"#3498DB"}, s=100, alpha=0.8 ) # 添加统计信息 sns.kdeplot( data=cluster_data, x="X", y="Y", levels=5, color="black", alpha=0.5 ) # 样式优化 plt.title("双聚类数据分布与密度图", fontsize=16, pad=20) plt.xlabel("特征X轴", labelpad=15) plt.ylabel("特征Y轴", rotation=0, labelpad=25) plt.xticks(fontsize=10) plt.yticks(fontsize=10) plt.grid(visible=True, which='major', linestyle='--', alpha=0.6) sns.despine(left=True, bottom=True) # 移除边框线 # 保存高清图 plt.savefig('scatterplot.png', dpi=300, bbox_inches='tight') ```
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值