Plot 朱莉娅-散点图:我如何为每个类定义不同的颜色?

Plot 朱莉娅-散点图:我如何为每个类定义不同的颜色?,plot,julia,scatter-plot,Plot,Julia,Scatter Plot,我正试图在朱莉娅做一个散点图,在那里我有3门课。 我想为每个类定义不同的颜色 我试过: using(PyPlot) pca = readdlm("pca1_2_fam.txt", header=false); plot(pca[:,3], pca[:,4], color = pca[:,1]) pca文件如下所示: 名称1 208094-0.00476681 0.00822032 名称1 514876-0.00531507-0.00721858 名称2 515043 0.00365503-0.

我正试图在朱莉娅做一个散点图,在那里我有3门课。
我想为每个类定义不同的颜色

我试过:

using(PyPlot)
pca = readdlm("pca1_2_fam.txt", header=false);
plot(pca[:,3], pca[:,4], color = pca[:,1])
pca文件如下所示:

名称1 208094-0.00476681 0.00822032
名称1 514876-0.00531507-0.00721858
名称2 515043 0.00365503-0.01794700
名称2 515066 0.00467896 0.00420396
名称3 799073 0.00811660-0.01903420
名称3 GLTGH40 0.00380041 0.00618471

在R中,我只是使用:

colnames(pca)=c("Breed","Animal","PCA1","PCA2")
qplot(PCA1,PCA2,data=pca,color=Breed,geom=c("point")) + theme(legend.position="none")   

我想学习如何在朱莉娅做到这一点

我发现PyPlot总体上是Julia中绘图的最佳选择,尽管还有许多其他软件包(Winston、Gadfly、Plotly等)。PyPlot本质上是Python库Matplotlib的包装器,Matplotlib本身大体上试图模拟Matlab中可用的绘图,但从更“pythonic”的角度来看

下面是一个应该实现您所追求目标的示例:

using PyPlot
(X1, Y1) = (rand(6), rand(6));
(X2, Y2) = (rand(6), rand(6));
(X3, Y3) = (rand(6), rand(6));

fig = figure(figsize=(10,10))
# xlabel("My X Label")  # optional x label
# ylabel("My Y Label")  # optional y label
title("Julia Plots Like a Boss")
R = scatter(X1,Y1,color="red", label = "Red Data", s = 40)
G = scatter(X2,Y2,color="blue", label = "Blue Data", s = 60)
B = scatter(X3,Y3,color="green", label = "Green Data", s = 80)
legend(loc="right")
savefig("/path/to/pca1_2_fam.pdf")  ## optional command to save results.  

评论:

您需要已经安装python和matplotlib才能使其正常工作。安装Anaconda()是一个不错的方法,但绝不是唯一的方法

您可以通过常规的Julia界面获得有关此处使用的所有函数的帮助,例如,
?scatter
为您提供了许多配置绘图的选项

您可以找到PyPlot文档和一系列要遵循的示例(注意,每个示例都有一个链接,可以在github上或通过IJulia显示完整的代码)

您还可以参考完整的Matplotlib文档。特别是,和将有助于为您提供想法。您有时需要做一些工作来将这些内容翻译成Julia,但希望我上面提到的其他特定于Julia的资源能够为您提供必要的指导

更新:

正如GersonOliveiraJunior在评论中所建议的,如果您想通过首先读取文件中的数据来实现这一点,您可以使用以下方法:

using DataFrames, PyPlot
pca2 = readtable("path/to/pca1_2_fam.txt", header=false, separator = ' ')
G = pca2[pca2[:,1].=="Name1",3:4]
R = pca2[pca2[:,1].=="Name2",3:4]
B = pca2[pca2[:,1].=="Name3",3:4]

fig = figure(figsize=(10,10))
title("Julia Plots Like a Boss")
scatter(G[:,1],G[:,2],color="green", label = "Green Data", s = 40)
scatter(R[:,1],R[:,2],color="red", label = "Red Data", s = 40)
scatter(B[:,1],B[:,2],color="blue", label = "Blue Data", s = 40)
legend(loc="right")

如果您已经熟悉
ggplot2
,我建议您看看
Gadfly
。它基于与
ggplot2
相同的图形原理语法,您会发现它的功能与R软件包非常相似

您的上述尝试也适用于
Gadfly

using Gadfly

pca = readdlm("pca1_2_fam.txt", header=false);
plot(x = pca[:,3], y= pca[:,4], color = pca[:,1])

别忘了先用
Pkg.add(“Gadfly”)
安装软件包。 您还可以在此处找到一些教程:
另外,请查看
DataFrames
软件包,以方便绘图和数据操作:

尝试
使用PyPlot
…?是否仍在维护Gadfly?@daycaster我不知道。我只知道这与ggplot非常相似,这就是我推荐它的原因。感谢niczky12,我尝试了你的建议,但我只是在底部收到一个空的绘图(没有点),有一个消息0元素数组{Any,1},我不明白,因为文件名是正确的。有什么想法吗?@gersonoliveira如果你有一个没有数据点的空绘图,那么可以肯定地说数据读取步骤有一些错误。您是否检查了
readdlm
是否按预期创建了数组?@niczky12是的,我检查了文件。它是1828x4数组{Any,2}。我也尝试将其转换为数据帧,但还是一样,没有点:(如果我只是像这样写:
plot(pca[:,3],pca[:,4])
可以工作,但这是一个不同的plot。谢谢!感谢airties作为一个单一文件,考虑到不同的类别(NAME1,NAME2,NAME3),我需要将文件分成三部分吗事实上,我试图分割我的文件,但它不起作用。是否有类似的东西:
name1=pca[pca[,1]=“name1”,]
谢谢。更新我意识到,如果我在数据帧中使用:
pca2=convert(DataFrame,pca)
转换我的文件,那么对于我使用的文件子集:
G=pca2[pca2[,1]。=“name1”,:]
所以,我对所有的类都这样做了,然后你的代码就可以工作了。但是,如果你知道更好的方法,请告诉我me@GersonOliveiraJunior是的,很有效!如果先使用
readtable()
加载数据,则无需进行转换。我已经相应地更新了答案。谢谢。还有一个问题。你有什么建议可以让这幅图保持高质量吗。我的想法是在Word文档中使用此情节。谢谢。@gersonoliveira你可以在这之后使用
savefig()
。请参见
?savefig()
,以获取上述示例的选项和更新答案。您可以通过(a)在
savefig()
函数中选择
dpi
级别和/或(b)在
fig()
函数中调整
figsize()
选项来调整质量。