ggplot2 | line plot 分组及均值线:聚类后的表达变化趋势图

本文介绍了如何使用R语言对Iris数据集进行预处理,包括数据清洗、宽变长转换,以及使用ggplot进行多变量可视化,展示不同物种在不同特征上的表达变化,同时进行了聚类和统计分析。

1. 效果图

在这里插入图片描述

2. 预处理及绘图

# 输入数据
> head(dat)
  Species cid     variable value
1  setosa   1 Sepal.Length   5.1
2  setosa   2 Sepal.Length   4.9
3  setosa   3 Sepal.Length   4.7
4  setosa   4 Sepal.Length   4.6
5  setosa   5 Sepal.Length   5.0
6  setosa   6 Sepal.Length   5.4


# 预处理及绘图
row.num=nrow(iris)
dat=iris[1:row.num,] #假设有4个时间点,最后一列是聚类结果
dat$cid=rownames(dat) #很重要!用于 ggplot 的 group
head(dat)
#宽变长
dat = tidyr::gather(data = dat, key = "variable", value = "value", -c(Species, cid))
# or: 宽变长
#dat=reshape2::melt(dat)

# 限定x轴顺序
dat$variable=factor(dat$variable, levels = c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width'))
head(dat)
dim(dat)
ggplot(dat, aes(x=variable, y=value, group=cid, color=Species))+
  geom_hline(yintercept =4, linetype=2, size=0.5) +
  geom_line(size=0.3)+
  stat_summary(aes(group=1),fun.y=mean, geom="line", size=0.8, color="black")+
  facet_wrap(Species~.)+
  labs(x="Stage", y='Expression')+
  theme_bw()+
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        axis.text = element_text(size=8, face = "bold"),
        axis.text.x=element_text(angle=60, hjust=1),
        strip.background = element_rect(fill="white"),
        strip.text = element_text(size = 8, face = "bold"))

### 模糊C均值聚类的数据分布可视化 要生成模糊C均值聚类(FCM)的数据分布可视化图表,可以利用Python中的`sklearn-fuzzy`库来实现FCM算法,并结合Matplotlib或Seaborn等绘图工具完成数据分布的可视化。以下是详细的解决方案: #### 使用Matplotlib绘制二维数据分布图 对于二维数据集,可以直接使用散点图表示不同簇的数据点分布以及它们的隶属度。 ```python import numpy as np from matplotlib import pyplot as plt from fcmeans import FCM # 导入FCM模块 # 假设dataset为已加载的二维数据集 fcm = FCM(n_clusters=3) # 设定聚类数为3 fcm.fit(dataset) # 获取聚类中心和隶属度矩阵 centers = fcm.centers u_matrix = fcm.u # 可视化部分 plt.figure(figsize=(8, 6)) for i in range(centers.shape[0]): # 绘制每个簇的数据点,颜色深浅代表隶属度大小 plt.scatter( dataset[:, 0], dataset[:, 1], c=u_matrix[i], alpha=0.5, label=f'Cluster {i+1}' ) # 绘制聚类中心 plt.scatter( centers[:, 0], centers[:, 1], marker='x', s=200, linewidths=3, color='r', label='Centroids' ) plt.title('FCM Clustering Data Distribution') plt.xlabel('Feature X1') plt.ylabel('Feature X2') plt.legend() plt.grid(True) plt.show() ``` 上述代码展示了如何通过隶属度矩阵`u_matrix`控制散点的颜色深浅,从而反映各数据点属于某个簇的程度[^1]。 --- #### 高维数据的降维与可视化 当数据维度较高时,可采用PCA(主成分分析)或t-SNE方法将其降至二维或三维后再进行可视化。 ```python from sklearn.decomposition import PCA pca = PCA(n_components=2) # 将数据降维至2D reduced_data = pca.fit_transform(dataset) fcm = FCM(n_clusters=3) fcm.fit(reduced_data) centers = fcm.centers u_matrix = fcm.u plt.figure(figsize=(8, 6)) for i in range(centers.shape[0]): plt.scatter( reduced_data[:, 0], reduced_data[:, 1], c=u_matrix[i], alpha=0.5, label=f'Cluster {i+1}' ) plt.scatter( centers[:, 0], centers[:, 1], marker='x', s=200, linewidths=3, color='k', label='Centroids' ) plt.title('Reduced Dimension Visualization with PCA') plt.xlabel('Principal Component 1') plt.ylabel('Principal Component 2') plt.legend() plt.grid(True) plt.show() ``` 此代码片段说明了如何先对高维数据应用PCA降维,然后再执行FCM并绘制结果[^2]。 --- #### Silhouette Coefficient 的可视化 为了评估聚类的效果,还可以绘制轮廓系数曲线作为辅助信息。 ```python from sklearn.metrics import silhouette_score silhouette_scores = [] k_range = range(2, 10) for k in k_range: fcm.n_clusters = k fcm.fit(dataset) labels = fcm.predict(dataset) score = silhouette_score(dataset, labels) silhouette_scores.append(score) plt.plot(list(k_range), silhouette_scores, 'bo-', lw=2) plt.title('Silhouette Scores vs Number of Clusters') plt.xlabel('Number of Clusters (K)') plt.ylabel('Silhouette Score') plt.xticks(k_range) plt.grid(True) plt.show() ``` 这段代码实现了针对不同聚类数量计算轮廓系数,并以折线图形式呈现其变化趋势。 --- ### 注意事项 - 如果需要更复杂的交互功能,建议引入Jupyter Notebook配合Plotly或者Bokeh库开发动态图表。 - 对于大规模数据集,应考虑优化内存占用率较高的步骤,比如减少迭代次数或采样处理原始输入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值