如何用R语言r软件绘制表达谱热图热图

最简单最实用的R语言热图绘制教程(没有R基础-上手只需10min) - 简书
最简单最实用的R语言热图绘制教程(没有R基础-上手只需10min)
最简单最实用的R语言热图绘制教程(没有R基础-掌握只需10min)
前面用Excel绘制热图,在熟练的情况下,操作起来其实还是比较快速和方便的,尤其对于具有代码恐惧症的朋友。教程发出去之后,即有收到消息,希望能写一个用R语言绘制热图的教程。考虑到目前本人的时间和精力以及”生信札记”公众号其实关注的人不多,我即应下,Excel绘制热图的推文阅读量超过500,我就写一个用R语言绘制热图的。然后….确实超过500了,那么也不爽约,动手写写。?如何写一个实用的,简单的用R语言绘制热图的教程?我想这篇推文得从零基础的角度出发,从偏颇的R语言的介绍与安装开始。
简单介绍R语言
关于R语言,真的要了解他是什么,权威的答案google即可。这里只说我个人有偏颇的观点,重点在说清楚他是什么东西。R语言,从其名字来看,其是一门编程语言,也就是语言。语言就有其语法,跟我们学的外语如英语的语法是一个概念。几乎每一门编程语言都需要编译器或与解释器,这两个器的主要作用就是,把我们按照某种编程语言如R语言的语法写出来的语句,翻译成计算机能识别的代码或并执行这些代码并返回结果。
为什么是R语言
计算机绘图或者出图,到底就是定点和描线,后者最终也是点。GUI软件更或者是Excel等出图软件的操作界面实质是对代码的封装,将看似复杂的绘图代码隐藏起来,就如我们手上的智能手机如iphone,几乎所有人都可以直接上手使用,而不需要了解到底开机关机,打开微信等的具体硬件或者编程语言或代码实现。编程语言有很多,目前也有较多的语言是支持出图的。而目前在我所了解的生信数据出图上,最常见的就是
R (语言)
R语言,前身是S语言,是一门统计学家发明的语言,所以事实上其天生善于完成统计运算,内置了太多统计相关函数,如t.test()。而生物学研究,在现在每时每刻都产生大量数据的时间点上,从数据中抽取出信息,生物学研究比以往任何时候更依赖于统计(因为….数据太多,根本看不多来,正确的统计分析至少可以简化)。当然,可视化也是重点,对数据涵盖的信息进行可视化,我们甚至使用生物学家特有的直觉,用我们自己专业的视角去观察数据。对此,R正好两者都擅长或者现在都擅长。R语言,其实存在不少人包括我,觉得他其实并不太像一门编程语言。但是这并没有所谓,我个人认可的有偏颇的观点是:一门编程语言的流行,要么其设计优秀,要么具有稳定而活跃的社区。设计优秀与社区活跃可以是相辅相成,但事实上只要有活跃的社区,设计是否优秀可能暂时并没那么重要。为此引入一句,大家可以看看perl曾经的火爆程度。R语言,就是一个庞大的帝国,他其实是一个全家桶,封装了各种,也调用了各种,包括了Java码,C码,C++码等等。对R语言的基本使用,其实就是用所谓的 R 包 (R package)。每一个R包的作者会把有用或者自己觉得有用的其写的函数更或者对象封装起来,最后,对于我们使用者而言,就只要下载安装R包,然后准备数据和输入函数,得到结果这一个R语言的使用逻辑简单到几乎所有人x3(重复三遍的意思)都会用,也非常适合完全没有计算机基础的生物学研究工作者。无论如何,反正用R就对了,R语言现在很火,即使他隐藏的复杂统计模型的同时,也隐藏了各式各样的问题与坑。
安装R语言的运行环境(解释器)
在windows下安装R语言运行环境,是一件再简单不过的事情(在LInux和Mac上也是类似)。进入R语言的官网主页,,即可看到R语言环境的下载,根据自己的系统进行选择,点击跳转
这里默认使用的是一台完全没有安装过的R语言环境的电脑
如此,等待下载完毕之后,进行安装。安装R语言环境。一般改选为English,毕竟是外文开发的,中文的提示有时看起来很怪。然而当然也是用的中文。
随后建议一路默认,同样注意,
建议程序都安装在路径没有空格没有中文的目录下,如果这一行看不懂,那就不管了,默认先
最后,可以在桌面看到R语言运行环境的图标,现在需要做的是,双击打开它,并进入R的GUI运行环境(提示,当然有其他运行方式,如脚本运行,这里先不扯)
进来之后,那就开干。
安装R语言绘制热图最简单的R包(pheatmap)
最基本R语言使用,其实就是使用各式各样的函数,而这些函数,要么是内置的,要么是别人写好并封装成R包的。进行热图绘制,最方便的R包,莫过于pheatmap。所以,第一步,安装这个R包在保证网络畅通的情况下,输入
install.packages("pheatmap")
可能会弹出窗口,让选择镜像,选择一个距离自己近的地方,这样下载起来会快很多
如果出现下面这种提示,似乎是不用理会,一路确定或者下一步即可
完成安装之后,直接输入,如果发现没有任何提示,那么就是安装完成了
library(pheatmap)
使用pheatmap进行热图绘制
准备数据,最简单粗暴的方式,从Excel中复制,
此时,这个基因表达矩阵已经存放在电脑的剪切板中,回到R语言运行环境,输入(如果是直接复制下面这行代码,那么注意,复制代码的同时已经替换了剪贴板内容,此时黏贴代码之后不要回车,先回去Excel重新复制表达开矩阵)
Exp&-read.delim("clipboard",header=T,row.names=1)
注意,所有字符都是外文的,如果出错,注意是不是 横杆 在复制代码的时候被转码成 中文的,自己输入就没问题。
此时你只需要第三行代码,就可以输出一张可以看的热图
pheatmap(Exp)
一般情况下,我们需要相对基因进行标准化
pheatmap(Exp,scale="row")
列的顺序是时间序列,我们不应该对列进行聚类
pheatmap(Exp,scale="row",cluster_cols=F)
配色似乎也不好看,
pheatmap(Exp,scale="row",cluster_cols=F,color = colorRampPalette(c("navy", "white", "firebrick3"))(50))
差不多了,剩下的就看自己造化了
差点忘了保存图片
即可保存为各种格式的图片
用了一个多小时写了这个,相信应该可以让零基础的朋友用R语言出一张能看的热图。pheatmap的功能还是可以的,出几个不错的热图,有很多细节可以调整。操作的灵活,修改的便捷,可能才是用代码绘图的方便之处。用R语言绘图,那么基础就是掌握R语言。如此才能更好的R,出更好看的图。学习R语言,还是需要时间的。具体或许后面再写写R学习的个人经验。当然,假期已经结束了,今天就回校干课题了。如果后面可以抽出时间,那么R语言绘制热图的,或许至少再出一个 pheatmap 更多的使用细节。毕竟,做一张拿得出手的热图,还是需要更多的操作。
最后附上使用的代码
library(pheatmap)
# 注意,剪切板中必须是表达矩阵
Exp&-read.delim(file="clipboard",header=T,row.names=1,sep="\t")
pheatmap(Exp)
pheatmap(Exp,scale="row")
pheatmap(Exp,scale="row",cluster_cols=F)
pheatmap(Exp,scale="row",cluster_cols=F,color = colorRampPalette(c("navy", "white", "firebrick3"))(50))
参与讨论交流
扫码添加 我的个人微信,如果以上二维码过期了的话,有问题请直接在微信群聊中交流
如果要直接向我提问,那么请扫码加入我的 知识星球,发帖交流,生信相关,TBtools相关的学习讨论沉淀
扫码关注,微信公众号 生信札记
扫码加入(如果正好清理了人有名额的话) 纯粹的生物信息交流群,bioinformatics*中国 QQ大群 ()R语言 绘制热图
R语言 绘制热图
### 安装软件包
install.packages("pheatmap")
install.packages("vegan")
### 加载所需软件包
library(pheatmap)
library(gplots)
library(vegan)
library(permute)
library(lattice)
path &- "C:/Users/yuki_cool/RWorkspace/progess.csv"
#data&-read.csv(path, sep=",")
data&-read.table(path, header = T, sep ="\t", row.names = 1)
data&-read.table(path, header = T, sep =",", row.names = 1)
data_matrix&-as.matrix(data)
pheatmap(data_matrix, color = heat.colors(256))
heatmap.2(data_matrix, Rowv = NA , Colv = 2)
heatmap(data_matrix, Rowv = 1,
#mycolors &- colorRampPalette(c("blue", "white", "darkgreen", "yellow", "orangered"), bias=1.2)(n)
#barplot(rep(1,times=n), col=mycolors, border=mycolors, axes=FALSE)
mycolors &- colorRampPalette(c("black", "green", "red"), bias = 1.2)(100)
heatmap(data_matrix, Rowv=NA, Colv=NA, col= mycolors, legend = TRUE, revC=FALSE, scale="column")
drows&-vegdist(data_matrix, method ="bray")
dcols&-vegdist(t(data_matrix), method ="bray")
pdf(file ="heatmap1.pdf", width = 10, height = 10)
legend 的 范围
############# clustering_method ##############################################
#the agglomeration method to be used.
#This should be (an unambiguous abbreviation of) one of "ward.D", "ward.D2",
# "single", "complete", "average" (= UPGMA), "mcquitty" (= WPGMA),
#"median" (= WPGMC) or "centroid" (= UPGMC).
##############################################################################
pheatmap(data_matrix,cellwidth = 20, cellheight = 20, treeheight_row = 20,cluster_cols = FALSE,
color = colorRampPalette(c("green", "black","red"))(1000),
legend = FALSE, border_color = NA, fontsize_row = 10,scale = TRUE,
fontsize_col = 10,ColSideColors = heat.colors(12), clustering_method ="ward.D", main ="Sorce")
官方文档:
Version:1.0StartHTML: EndHTML: StartFragment:EndFragment:
pheatmap {pheatmap}
R Documentation
A function to draw clustered heatmaps.
Description
A function to draw clustered heatmaps where one has better controlover some graphical parameters such as cell size, etc.
pheatmap(mat, color = colorRampPalette(rev(brewer.pal(n = 7, name =
“RdYlBu”)))(100), kmeans_k = NA, breaks = NA, border_color = “grey60”,
cellwidth = NA, cellheight = NA, scale = “none”, cluster_rows = TRUE,
cluster_cols = TRUE, clustering_distance_rows = “euclidean”,
clustering_distance_cols = “euclidean”, clustering_method = “complete”,
clustering_callback = identity2, cutree_rows = NA, cutree_cols = NA,
treeheight_row = ifelse((class(cluster_rows) == “hclust”) || cluster_rows,
50, 0), treeheight_col = ifelse((class(cluster_cols) == “hclust”) ||
cluster_cols, 50, 0), legend = TRUE, legend_breaks = NA,
legend_labels = NA, annotation_row = NA, annotation_col = NA,
annotation = NA, annotation_colors = NA, annotation_legend = TRUE,
annotation_names_row = TRUE, annotation_names_col = TRUE,
drop_levels = TRUE, show_rownames = T, show_colnames = T, main = NA,
fontsize = 10, fontsize_row = fontsize, fontsize_col = fontsize,
display_numbers = F, number_format = “%.2f”, number_color = “grey30”,
fontsize_number = 0.8 * fontsize, gaps_row = NULL, gaps_col = NULL,
labels_row = NULL, labels_col = NULL, filename = NA, width = NA,
height = NA, silent = FALSE, …)
mycolors &- colorRampPalette(c(“black”,”green”,”red”), bias = 1.2)(100);
redgreen(75)
预设的五个调色板:rainbow
heat.colors
terrain.colors
topo.colors
heat.colors(256)
the number of kmeans clusters to make, if we want to agggregate the rows before drawing heatmap. If NA then the rows are not aggregated.
a sequence of numbers that covers the range of values in mat and is one element longer than color vector. Used for mapping values to colors. Useful, if needed to map certain values to certain colors, to certain values. If value is NA then the breaks are calculated automatically.
border_color
单元格边界颜色
单元格从宽度
cellheight
单元格高度
归一化,Corresponding values are “row”, “column” and”none”
cluster_rows
按列聚类分析
TRUE or FALSE
cluster_cols
按横聚类分析
clustering_distance_rows
列聚类分析
euclidean”, “maximum”, “manhattan”,”canberra”, “binary” or “minkowski”
clustering_distance_cols
clustering_method
使用聚类的方法: “ward.D”,”ward.D2”, “single”, “complete”, “average” (= UPGMA), “mcquitty” (= WPGMA),”median” (= WPGMC) or “centroid” (= UPGMC).
clustering_callback
callback function to modify the clustering. Is called with two parameters: original hclustobject and the matrix used for clustering. Must return a hclust object.
cutree_rows
根据聚类分析
按行数分开
cutree_cols
treeheight_row
树的高度,默认50
treeheight_col
树的高度,默认50
legend_breaks
vector of breakpoints for the legend.
legend_labels
vector of labels for the legend_breaks.
annotation_row
data frame that specifies the annotations shown on left side of the heatmap. Each row defines the features for a specific row. The rows in the data and in the annotation are matched using corresponding row names. Note that color schemes takes into account if variable is continuous or discrete.
annotation_col
annotation_col = data.frame(factor(GeneClass = rep(“Gene1”,”Gene 2”), c(2, 3)))
annotation
deprecated parameter that currently sets the annotation_col if it is missing
annotation_colors
list for specifying annotation_row and annotation_col track colors manually. It is possible to define the colors for only some of the features. Check examples for details.
annotation_legend
boolean value showing if the legend for annotation tracks should be drawn.
annotation_names_row
boolean value showing if the names for row annotation tracks should be drawn.
annotation_names_col
boolean value showing if the names for column annotation tracks should be drawn.
drop_levels
logical to determine if unused levels are also shown in the legend
show_rownames
show_colnames
base fontsize for the plot
fontsize_row
fontsize for rownames (Default: fontsize)
fontsize_col
fontsize for colnames (Default: fontsize)
display_numbers
单元显示数字
number_format
格式(C printf style) of the numbers shown in cells. For example “%.2f” shows 2 decimal places and “%.1e” shows exponential notation (see more in sprintf).
number_color
fontsize_number
加入间隙,仅在列不聚类时使用。
See cutree_row to see how to introduce gaps to clustered rows.
。。。。。。。。。。
labels_row
行名替换,不使用rownames。Exp:labels &-c(“1111”,”2222”)
labels_col
存储图片,格式 png, pdf, tiff, bmp, jpeg.
输出文件的宽度
。。。。。。。。。
do not draw the plot (useful when using the gtable output)
graphical parameters for the text used in plot. Parameters passed to grid.text, seegpar.
The function also allows to aggregate the rows using kmeansclustering. This is advisable if number of rows is so big that R cannot handletheir hierarchical clustering anymore, roughly more than 1000. Instead ofshowing all the rows separately one can cluster the rows in advance and showonly the cluster centers. The number of clusters can be tuned with parameterkmeans_k.
Invisibly a list of components
tree_row the clustering of rowsas hclust object
tree_col the clustering of columnsas hclust object
kmeans the kmeans clustering ofrows if parameter kmeans_k was specified
R语言绘制热图——pheatmap
R语言绘制heatmap热图
R语言绘制热图Heatmap
绘制地图&热力图-R语言
没有更多推荐了,24小时热门版块排行榜&&&&
【悬赏金币】回答本帖问题,作者Georgia8将赠送您 11 个金币
(初入文坛)
在线: 9.6小时
虫号: 2972990
注册: 专业: 植物生殖生物学
如何使用R语言做热图?
小女子菜鸟一枚,最近需要一个热图,但是在完全不了解R语言,所以倾我所有的金币来求助,希望厉害的大侠们不吝赐教,畅所欲言!!!感激不尽。。。
& 猜你喜欢
已经有11人回复
已经有4人回复
已经有66人回复
已经有21人回复
已经有6人回复
已经有19人回复
已经有52人回复
已经有4人回复
已经有31人回复
已经有146人回复
& 本主题相关商家推荐:
& 本主题相关价值贴推荐,对您同样有帮助:
已经有5人回复
已经有84人回复
已经有58人回复
已经有0人回复
已经有41人回复
已经有6人回复
已经有13人回复
已经有3人回复
已经有100人回复
已经有5人回复
已经有41人回复
已经有37人回复
已经有197人回复
已经有4人回复
已经有129人回复
已经有382人回复
已经有114人回复
已经有5人回复
已经有75人回复
已经有43人回复
已经有20人回复
已经有290人回复
已经有21人回复
已经有10人回复
已经有3人回复
已经有7人回复
已经有69人回复
(初入文坛)
在线: 9.6小时
虫号: 2972990
注册: 专业: 植物生殖生物学
哇,谢谢super robot.
相关版块跳转
第一性原理
我要订阅楼主
的主题更新
小木虫,学术科研互动社区,为中国学术科研免费提供动力
违规贴举报删除请发送邮件至:
广告投放与宣传请联系 李想 QQ:
QQ:&&邮箱:
Copyright &
MuChong.com, All Rights Reserved. 小木虫 版权所有生成测试数据
绘图首先需要数据。通过生成一堆的向量,转换为矩阵,得到想要的数据。
data &- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/10, (6:1)/10, 1:6, 6:1, 6:1, 1:6, 6:1, 1:6, 1:6, 6:1)
[1] 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0 6.0 5.0[15] 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.0 0.6 0.5 0.4 0.3[29] 0.2 0.1 0.1 0.2 0.3 0.4 0.5 0.6 0.1 0.2 0.3 0.4 0.5 0.6[43] 0.6 0.5 0.4 0.3 0.2 0.1 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0[57] 4.0 3.0 2.0 1.0 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0[71] 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0 1.0 2.0 3.0 4.0 5.0 6.0[85] 1.0 2.0 3.0 4.0 5.0 6.0 6.0 5.0 4.0 3.0 2.0 1.0
注意:运算符的优先级
[1] 1 2 3 4 5 6 7
Vector转为矩阵 (matrix),再转为数据框 (data.frame)
# ncol 指定列数
# byrow 先按行填充数据
# ?matrix 可查看函数的使用方法
# as.data.frame的as系列是转换用的
data &- as.data.frame(matrix(data, ncol=12, byrow=T))
# 增加列的名字
colnames(data) &- c("Zygote","2_cell","4_cell","8_cell","Morula","ICM","ESC","4 week PGC","7 week PGC","10 week PGC","17 week PGC","OOcyte")
# 增加行的名字
rownames(data) &- paste("Gene", 1:8, sep="_")
# 只显示前6行和前4列
head(data)[,1:4]
虽然方法比较繁琐,但一个数值矩阵已经获得了。
还有另外2种获取数值矩阵的方式。
读入字符串
# 使用字符串的好处是不需要额外提供文件
# 简单测试时可使用,写起来不繁琐,又方便重复
# 尤其适用于在线提问时作为测试案例
& txt &- "ID;Z2_4_8_cell
+ Gene_1;1;2;3;4
+ Gene_2;6;5;4;5
+ Gene_3;0.6;0.5;0.4;0.4"
# 习惯设置quote为空,避免部分基因名字或注释中存在引号,导致读入文件错误。
& data2 &- read.table(text=txt, sep=";", header=T, row.names=1, quote="")
& head(data2)
Zygote X2_cell X4_cell X8_cell
可以看到列名字中以数字开头的列都加了X。一般要尽量避免行或列名字以数字开头,会给后续分析带去一些困难;另外名字中出现的非字母、数字、下划线、点的字符都会被转为点,也需要注意,尽量只用字母、下划线和数字。
# 读入时,增加一个参数`check.names=F`也可以解决问题。
# 这次数字前没有再加 X 了
& data2 &- read.table(text=txt, sep=";", header=T, row.names=1, quote="", check.names = F)
& head(data2)
Zygote 2_cell 4_cell 8_cell
与上一步类似,只是改为文件名,不再赘述。
& data2 &- read.table("filename", sep=";", header=T, row.names=1, quote="")
转换数据格式
数据读入后,还需要一步格式转换。在使用ggplot2作图时,有一种长表格模式是最为常用的,尤其是数据不规则时,更应该使用。
# 如果包没有安装,运行下面一句,安装包
#install.packages(c("reshape2","ggplot2","magrittr"))
library(reshape2)
library(ggplot2)
# 转换前,先增加一列ID列,保存行名字
data$ID &- rownames(data)
# melt:把正常矩阵转换为长表格模式的函数。工作原理是把全部的非id列的数值列转为1列,命名为value;所有字符列转为variable列。
# id.vars 列用于指定哪些列为id列;这些列不会被merge,会保留为完整一列。
data_m &- melt(data, id.vars=c("ID"))
head(data_m)
& & & & & & &ID & & variable & value
1 &Gene_1 & & &Zygote & 1.0
2 &Gene_2 & & &Zygote & 6.0
3 &Gene_3 & & &Zygote & 0.6
4 &Gene_4 & & &Zygote & 0.1
5 &Gene_5 & & &Zygote & 1.0
6 &Gene_6 & & &Zygote & 6.0
7 &Gene_7 & & &Zygote & 6.0
8 &Gene_8 & & &Zygote & 1.0
9 &Gene_1 & & &2_cell & 2.0
10 Gene_2 & & &2_cell & 5.0
11 Gene_3 & & &2_cell & 0.5
12 Gene_4 & & &2_cell & 0.2
13 Gene_5 & & &2_cell & 2.0
14 Gene_6 & & &2_cell & 5.0
15 Gene_7 & & &2_cell & 5.0
16 Gene_8 & & &2_cell & 2.0
数据转换后就可以画图了,分解命令如下:
# data_m: 是前面费了九牛二虎之力得到的数据表
# aes: aesthetic的缩写,一般指定整体的X轴、Y轴、颜色、形状、大小等
# 在最开始读入数据时,一般只指定x和y,其它后续指定
p &- ggplot(data_m, aes(x=variable,y=ID))
# 热图就是一堆方块根据其值赋予不同的颜色,所以这里使用fill=value, 用数值做填充色。
p &- p + geom_tile(aes(fill=value))
# ggplot2为图层绘制,一层层添加,存储在p中,在输出p的内容时才会出图。
## 如果你没有使用Rstudio或其它R图形版工具,而是在远程登录的服务器上运行的交互式R,需要输入下面的语句,获得输出图形(图形存储于R的工作目录下的Rplots.pdf文件中)
热图出来了,但有点不对劲,横轴重叠一起了。一个办法是调整图像的宽度,另一个是旋转横轴标记
# theme: 是处理图美观的一个函数,可以调整横纵轴label的选择、图例的位置等
# 这里选择X轴标签45度。
# hjust和vjust调整标签的相对位置,具体见
# 简单说,hjust是水平的对齐方式,0为左,1为右,0.5居中,0-1之间可以取任意值。vjust是垂直对齐方式,0底对齐,1为顶对齐,0.5居中,0-1之间可以取任意值
p &- p + theme(axis.text.x=element_text(angle=45, hjust=1, vjust=1))
设置想要的颜色
# 连续的数字,指定最小数值代表的颜色和最大数值赋予的颜色
# 注意fill和color的区别,fill是填充,color只针对边缘
p &- p + scale_fill_gradient(low = "white", high = "red")
调整legend的位置
# postion可以接受的值有 top, bottom, left, right, 和一个坐标 c(0.05,0.8) (左上角,坐标是相对于图的左下角计算的)
p &- p + theme(legend.position="top")
调整背景和背景格线以及X轴、Y轴的标题(注意灰色的背景没了)
p &- p + xlab("samples") + theme_bw() + theme(panel.grid.major = element_blank()) + theme(legend.key=element_blank())
合并以上命令,就得到了下面这个看似复杂的绘图命令
p &- ggplot(data_m, aes(x=variable,y=ID)) + xlab("samples") + theme_bw() + theme(panel.grid.major = element_blank()) + theme(legend.key=element_blank())
+ theme(axis.text.x=element_text(angle=45,hjust=1, vjust=1)) + theme(legend.position="top") +
geom_tile(aes(fill=value)) + scale_fill_gradient(low = "white", high = "red")
图形出来了,就得考虑存储了
# 可以跟输出文件不同的后缀,以获得不同的输出格式
# colormode支持srgb (屏幕)和cmyk (打印,部分杂志需要,看上去有点褪色的感觉)格式
ggsave(p, filename="heatmap.pdf", width=10, height=15, units=c("cm"),colormodel="srgb")
至此,完成了简单的heatmap的绘图。但实际绘制时,经常会碰到由于数值变化很大,导致颜色过于集中,使得图的可读性下降很多。因此需要对数据进行一些处理,具体的下次再说。
阅读(...) 评论()Sina Visitor System

我要回帖

更多关于 以夏天真热绘制主题网络图 的文章

 

随机推荐