Yay! Thank you. That does make things a lot easier. I think I'm better
understanding how to use melt.

However, now there's another plot I want to make. For one :_type, I want to
make two subplots (vertically stacked). The top one should have :thing1 and
:thing2 in different colors; the bottom one should have :speed. (The :x is
always :rank.)

I tried melting it, but I'm not sure how to get two variables on one plot
and one on the other:
~~~
julia> reds = t[t[:_type] .== "red",:]
3x5 DataFrame
|-------|-------|------|-------|--------|--------|
| Row # | _type | rank | speed | thing1 | thing2 |
| 1     | "red" | 1    | 10.0  | 0.0    | 0.0    |
| 2     | "red" | 2    | 11.1  | 0.1    | 0.2    |
| 3     | "red" | 3    | 12.4  | 0.3    | 0.0    |

julia> m_reds = melt(reds,[:_type,:rank],[:speed,:thing1,:thing2])
9x4 DataFrame
|-------|----------|-------|-------|------|
| Row # | variable | value | _type | rank |
| 1     | speed    | 10.0  | "red" | 1    |
| 2     | speed    | 11.1  | "red" | 2    |
| 3     | speed    | 12.4  | "red" | 3    |
| 4     | thing1   | 0.0   | "red" | 1    |
| 5     | thing1   | 0.1   | "red" | 2    |
| 6     | thing1   | 0.3   | "red" | 3    |
| 7     | thing2   | 0.0   | "red" | 1    |
| 8     | thing2   | 0.2   | "red" | 2    |
| 9     | thing2   | 0.0   | "red" | 3    |

julia> plot(m_reds,
            ygroup=:variable, x=:rank, y=:value, color=:variable,
            Geom.subplot_grid(Geom.point))
~~~

Another problem is that I want :thing1 and :thing2 to be on one y-scale and
:speed to be on a different one. (The x-axis scale is the same for both.) I
don't want to set them each separately to a specific scale, just let them
each be separately determined automatically.

Thanks for your help,
Leah


On Fri, Jul 25, 2014 at 4:01 PM, Daniel Jones <danielcjo...@gmail.com>
wrote:

> Oh, I see. I think the easiest way would be to rearrange the data with the
> melt function.
>
>
> melt(t, [:_type, :rank, :speed]) makes a table like:
>
> |-------|----------|-------|---------|------|-------|
> | Row # | variable | value | _type   | rank | speed |
> | 1     | thing1   | 0.0   | "red"   | 1    | 10.0  |
> | 2     | thing1   | 0.1   | "red"   | 2    | 11.1  |
> | 3     | thing1   | 0.3   | "red"   | 3    | 12.4  |
> | 4     | thing1   | 0.2   | "green" | 1    | 8.0   |
> | 5     | thing1   | 0.1   | "green" | 2    | 7.0   |
> | 6     | thing1   | 0.2   | "green" | 3    | 9.0   |
> | 7     | thing1   | 1.0   | "blue"  | 1    | 1.0   |
> | 8     | thing1   | 0.2   | "blue"  | 2    | 2.0   |
> | 9     | thing1   | 0.1   | "blue"  | 3    | 3.0   |
> | 10    | thing2   | 0.0   | "red"   | 1    | 10.0  |
> | 11    | thing2   | 0.2   | "red"   | 2    | 11.1  |
> | 12    | thing2   | 0.0   | "red"   | 3    | 12.4  |
> | 13    | thing2   | 1.0   | "green" | 1    | 8.0   |
> | 14    | thing2   | 0.5   | "green" | 2    | 7.0   |
> | 15    | thing2   | 0.0   | "green" | 3    | 9.0   |
> | 16    | thing2   | 1.0   | "blue"  | 1    | 1.0   |
> | 17    | thing2   | 0.2   | "blue"  | 2    | 2.0   |
> | 18    | thing2   | 0.1   | "blue"  | 3    | 3.0   |
>
> With which the plot can be simplified to:
>
> plot(melt(t, [:_type, :rank, :speed]),
>      ygroup=:_type, x=:rank, y=:value, color=:variable,
>      Geom.subplot_grid(Geom.point),
>      Scale.discrete_color_manual("purple", "orange"))
>
>
>
> On Friday, July 25, 2014 12:05:02 PM UTC-7, Leah Hanson wrote:
>
>> That's not quite it. I think the :_type values being color names is
>> confusing things. I don't want the dots to be colored by :_type.
>>
>> I would like dots for :thing1 to be in purple and the dots for :thing2 to
>> be in orange. So every dot in the first layer needs to be purple and every
>> data in the second layer needs to be orange.
>>
>> Thanks,
>> Leah
>>
>>
>> On Fri, Jul 25, 2014 at 1:36 PM, Daniel Jones <daniel...@gmail.com>
>> wrote:
>>
>>>
>>> I think this will do the trick, if I understand what you're going for.
>>>
>>>  plot(t,layer(Geom.subplot_grid(Geom.point),ygroup=:_
>>> type,x=:rank,y=:thing1,color=:_type),
>>>         layer(Geom.subplot_grid(Geom.point),ygroup=:_type,x=:rank,
>>> y=:thing2,color=:_type),
>>>         Scale.discrete_color_manual("red", "green", "blue"))
>>>
>>>
>>> On Friday, July 25, 2014 10:51:14 AM UTC-7, Leah Hanson wrote:
>>>
>>>> Thank, that's very helpful. :)
>>>>
>>>> This is what worked:
>>>> ~~~
>>>> plot(t,layer(Geom.subplot_grid(Geom.point),ygroup=:_type,x=:
>>>> rank,y=:thing1,color=:_type),
>>>>               layer(Geom.subplot_grid(Geom.p
>>>> oint),ygroup=:_type,x=:rank,y=:thing2,color=:_type))
>>>> ~~~
>>>>
>>>> However, now I'd like to color by layer instead of by :_type, since I
>>>> want the two layers of dots to be different colors.
>>>>
>>>> This does not work:
>>>> ~~~
>>>> plot(t,layer(Geom.subplot_grid(Geom.point),ygroup=:_type,x=:
>>>> rank,y=:thing1,color="red"),
>>>>               layer(Geom.subplot_grid(Geom.p
>>>> oint),ygroup=:_type,x=:rank,y=:thing2,color="blue"))
>>>> ~~~
>>>>
>>>> I've also tried passing the color argument into Geom.point or
>>>> Geom.subplot_grid. I tried setting the value of color to be a
>>>> "Scale.discrete_color_manual", but the color aesthetic did not consider
>>>> that to be an appropriate type.
>>>>
>>>> How do assign per-layer colors?
>>>>
>>>> Thanks,
>>>> Leah
>>>>
>>>>
>>>> On Fri, Jul 25, 2014 at 12:34 PM, Johan Sigfrids <johan.s...@gmail.com>
>>>> wrote:
>>>>
>>>>> I think you might have to put the Geom.subplot_grid inside the layers.
>>>>>
>>>>>
>>>>> On Friday, July 25, 2014 7:37:48 PM UTC+3, Leah Hanson wrote:
>>>>>>
>>>>>> I am trying to make a relatively complicated graph in Gadfly, and am
>>>>>> struggling.
>>>>>>
>>>>>> This is some sample data with the same structure as my data.
>>>>>> ~~~
>>>>>> julia> t = readtable("testdata.csv")
>>>>>> 9x5 DataFrame
>>>>>> |-------|---------|------|-------|--------|--------|
>>>>>> | Row # | _type   | rank | speed | thing1 | thing2 |
>>>>>> | 1     | "red"   | 1    | 10.0  | 0.0    | 0.0    |
>>>>>> | 2     | "red"   | 2    | 11.1  | 0.1    | 0.2    |
>>>>>> | 3     | "red"   | 3    | 12.4  | 0.3    | 0.0    |
>>>>>> | 4     | "green" | 1    | 8.0   | 0.2    | 1.0    |
>>>>>> | 5     | "green" | 2    | 7.0   | 0.1    | 0.5    |
>>>>>> | 6     | "green" | 3    | 9.0   | 0.2    | 0.0    |
>>>>>> | 7     | "blue"  | 1    | 1.0   | 1.0    | 1.0    |
>>>>>> | 8     | "blue"  | 2    | 2.0   | 0.2    | 0.2    |
>>>>>> | 9     | "blue"  | 3    | 3.0   | 0.1    | 0.1    |
>>>>>> ~~~
>>>>>>
>>>>>> Currently, I am trying to make a plot with three rows; each row has a
>>>>>> plot with two layers. The rows are by :_type. The x-axis for everything 
>>>>>> is
>>>>>> :rank. The two layers should be scatterplots of :thing1 and :thing2.
>>>>>>
>>>>>> I have tried several variations, here is one of them:
>>>>>> ~~~
>>>>>> julia> plot(t,Geom.subplot_grid(Geom.point),ygroup=:_type,layer(x=:
>>>>>> rank,y=:thing1),layer(x=:rank,y=:thing2))
>>>>>> Error showing value of type Plot:
>>>>>> ERROR: The following aesthetics are required by Geom.point but are
>>>>>> not defined: x, y
>>>>>>
>>>>>>  in error at error.jl:21
>>>>>>  in assert_aesthetics_defined at /usr/local/google/home/lhanson
>>>>>> /.julia/v0.3/Gadfly/src/aesthetics.jl:148
>>>>>>  in render at /usr/local/google/home/lhanson/.julia/v0.3/Gadfly/
>>>>>> src/geom/point.jl:27
>>>>>>  in render_prepared at /usr/local/google/home/lhanson
>>>>>> /.julia/v0.3/Gadfly/src/Gadfly.jl:718
>>>>>>  in render at /usr/local/google/home/lhanson/.julia/v0.3/Gadfly/
>>>>>> src/geom/subplot.jl:234
>>>>>>  in render_prepared at /usr/local/google/home/lhanson
>>>>>> /.julia/v0.3/Gadfly/src/Gadfly.jl:718
>>>>>>  in render at /usr/local/google/home/lhanson/.julia/v0.3/Gadfly/src/
>>>>>> Gadfly.jl:673
>>>>>>  in display at /usr/local/google/home/lhanson/.julia/v0.3/Gadfly/src/
>>>>>> Gadfly.jl:922
>>>>>>  in display at /usr/local/google/home/lhanson/.julia/v0.3/Gadfly/src/
>>>>>> Gadfly.jl:837
>>>>>>  in print_response at REPL.jl:140
>>>>>>  in print_response at REPL.jl:125
>>>>>>  in anonymous at REPL.jl:584
>>>>>>  in run_interface at ./LineEdit.jl:1377
>>>>>>  in run_frontend at ./REPL.jl:816
>>>>>>  in run_repl at ./REPL.jl:170
>>>>>>  in _start at ./client.jl:399
>>>>>> ~~~
>>>>>>
>>>>>> How do I put layers inside a subplot?
>>>>>>
>>>>>> Thanks,
>>>>>> Leah
>>>>>>
>>>>>
>>>>
>>

Reply via email to