2016-06-17 3 views
4

Я пытаюсь сделать разброс в Джулии, где у меня 3 класса.
Я хотел бы определить разный цвет для каждого из этих классов.Julia - plot plot: как определить разные цвета для каждого класса?

Я пробовал:

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

Файл PCA, как:

Name1 208094 -0,00476681 0,00822032
Name1 514876 -0,00531507 -0,00721858
Name2 515043 0,00365503 -0,01794700
Name2 515066 0,00467896 0,00420396
Наименование3 799073 0,00811660 -0,01903420
Наименование3 GLTGH40 0,003800 41 0.00618471

В R, я сделал это только с помощью:

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

Я хотел бы узнать, как это сделать в Джулию.

+0

Try 'используя PyPlot' ....? – daycaster

ответ

3

Я нашел, что PyPlot является лучшим вариантом для построения в Julia, хотя есть также много других пакетов (Winston, Gadfly, Plotly и т. Д.). PyPlot по существу является оберткой для библиотеки Python Matplotlib, которая сама по себе стремится эмулировать построение графики, доступную в Matlab, но с более «пифонической» точки зрения.

Вот пример, который должен выполнить то, что вы ищете:

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. 

enter image description here

Комментарии:

Вы должны питона и Matplotlib установлены уже для того, чтобы это работало. Порядочный, но далеко не единственный способ сделать это, это установить Anaconda (https://www.continuum.io/downloads)

Вы можете получить помощь по всем функциям, используемым здесь через обычный интерфейс Julia, например. ?scatter дает вам множество возможностей для настройки ваших участков.

Вы можете найти документацию PyPlot here и кучу примеров, которые следует соблюдать here (обратите внимание, что для каждого примера есть ссылка, чтобы показать полный код на github или через IJulia).

Вы также можете обратиться к полной документации Matplotlib here. В частности, вам помогут идеи beginner's guide и examples. Вам нужно будет немного поработать, чтобы перевести их на Джулию, но, надеюсь, другие ресурсы, которые я упомянул выше, дадут необходимые рекомендации для этого.

Update:

Как 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") 
+0

Спасибо aireties Как один файл, мне нужно разделить файл по трем, учитывая разные категории (NAME1, NAME2, NAME3)? На самом деле я пытался разделить файл, но он не работает. Есть ли что-то вроде: 'name1 = pca [pca [, 1] ==" NAME1 ",]' Спасибо. –

+0

** UPDATE ** я понял, что если я конвертировать мой файл в DataFrame с помощью: 'PCA2 = новообращенный (DataFrame, PCA)' то для подмножества файла я использовал: 'G = PCA2 [PCA2 [ :, 1]. == "NAME1",:]; ' Итак, я сделал это для всех классов, а затем ваш код работает. :) Но, если вы знаете лучший способ сделать это, скажите, пожалуйста, –

+0

@GersonOliveiraJunior Да, это работает! Вы можете сделать это без преобразования, если вы используете 'readtable()' для первой загрузки ваших данных. Я обновил ответ соответствующим образом. –

3

Если вы уже знакомы с 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]) 

enter image description here

Не забудьте установить пакет с первой Pkg.add("Gadfly"). Вы также можете найти некоторые учебники здесь: https://github.com/dcjones/Gadfly.jl проверить Также вне DataFrames пакет для более легкого черчения и данных манипуляций: https://dataframesjl.readthedocs.io/en/latest/

+0

Сохраняется ли Gadfly? – daycaster

+0

@daycaster Я понятия не имею. Я просто знаю, что это очень похоже на ggplot, и именно поэтому я рекомендовал его. – niczky12

+0

Спасибо niczky12 Я попробовал ваше предложение, но я только что получил пустой сюжет (нет точек) Внизу появилось сообщение 0-элемент Array {Any, 1} Я не понял, потому что имя файла верное. Любая идея? –