Way to Plot Multiple Variables and Change Color

classic Classic list List threaded Threaded
11 messages Options
Reply | Threaded
Open this post in threaded view
|

Way to Plot Multiple Variables and Change Color

G.Maubach
Hi All,

in my current project I have to plot a whole bunch of related variables
(item batteries, e.g. How do you rate ... a) Accelaration, b) Horse Power,
c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.

I need to present the results as stacked bar charts where the variables
are columns and the percentages of the scales values (1 .. 4) are the
chunks of the stacked bar for each variable. To do this I have transformed
my data from wide to long and calculated the percentage for each variable
and value. The code for this is as follows:

-- cut --

dfr <- structure(
  list(
    v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
               4, 4, 4, 1, 1, 3, 3, 4),
    v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
               4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
    v07_03 = c(3, 2, 2, 1, 4, 1,
               2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
    v07_04 = c(3, 1, 1,
               4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
    v07_05 = c(1,
               2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
    v07_06 = c(1,
               2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
    v07_07 = c(3,
               2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
    v07_08 = c(3,
               2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
    cased_id = structure(
      1:20,
      .Label = c(
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10",
        "11",
        "12",
        "13",
        "14",
        "15",
        "16",
        "17",
        "18",
        "19",
        "20"
      ),
      class = "factor"
    )
  ),
  .Names = c(
    "v07_01",
    "v07_02",
    "v07_03",
    "v07_04",
    "v07_05",
    "v07_06",
    "v07_07",
    "v07_08",
    "cased_id"
  ),
  row.names = c(NA, -20L),
  class = c("tbl_df", "tbl",
            "data.frame")
)

mdf <- melt(df)
d_result <- mdf  %>%
  dplyr::group_by(variable) %>%
  count(value)

ggplot(
  d_result,
  aes(variable, y = n, fill = value)) +
  geom_bar(stat = "identity") +
  coord_cartesian(ylim = c(0,100))

-- cut --

Is there an easier way of doing this, i. e. a way without need to
transform the data?

How can I change the colors for the data points 1 .. 4?

I tried

-- cut --

  d_result,
  aes(variable, y = n, fill = value)) +
  geom_bar(stat = "identity") +
  coord_cartesian(ylim = c(0,100)) +
  scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))

-- cut -

but this does not work cause I am mixing continuous and descrete values.

How can I change the colors for the bars?

Kind regards

Georg

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Way to Plot Multiple Variables and Change Color

Ulrik Stervbo-2
Hi Georg,

I am a little unsure of what you want to do, but maybe this:

mdf <- melt(dfr)
d_result <- mdf  %>%
  dplyr::group_by(variable, value) %>%
  summarise(n = n())

ggplot(
  d_result,
  aes(variable, y = n, fill = value)) +
  geom_bar(stat = "identity")

HTH
Ulrik

On Tue, 28 Mar 2017 at 15:11 <[hidden email]> wrote:

> Hi All,
>
> in my current project I have to plot a whole bunch of related variables
> (item batteries, e.g. How do you rate ... a) Accelaration, b) Horse Power,
> c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.
>
> I need to present the results as stacked bar charts where the variables
> are columns and the percentages of the scales values (1 .. 4) are the
> chunks of the stacked bar for each variable. To do this I have transformed
> my data from wide to long and calculated the percentage for each variable
> and value. The code for this is as follows:
>
> -- cut --
>
> dfr <- structure(
>   list(
>     v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
>                4, 4, 4, 1, 1, 3, 3, 4),
>     v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
>                4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
>     v07_03 = c(3, 2, 2, 1, 4, 1,
>                2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
>     v07_04 = c(3, 1, 1,
>                4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
>     v07_05 = c(1,
>                2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
>     v07_06 = c(1,
>                2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
>     v07_07 = c(3,
>                2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
>     v07_08 = c(3,
>                2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
>     cased_id = structure(
>       1:20,
>       .Label = c(
>         "1",
>         "2",
>         "3",
>         "4",
>         "5",
>         "6",
>         "7",
>         "8",
>         "9",
>         "10",
>         "11",
>         "12",
>         "13",
>         "14",
>         "15",
>         "16",
>         "17",
>         "18",
>         "19",
>         "20"
>       ),
>       class = "factor"
>     )
>   ),
>   .Names = c(
>     "v07_01",
>     "v07_02",
>     "v07_03",
>     "v07_04",
>     "v07_05",
>     "v07_06",
>     "v07_07",
>     "v07_08",
>     "cased_id"
>   ),
>   row.names = c(NA, -20L),
>   class = c("tbl_df", "tbl",
>             "data.frame")
> )
>
> mdf <- melt(df)
> d_result <- mdf  %>%
>   dplyr::group_by(variable) %>%
>   count(value)
>
> ggplot(
>   d_result,
>   aes(variable, y = n, fill = value)) +
>   geom_bar(stat = "identity") +
>   coord_cartesian(ylim = c(0,100))
>
> -- cut --
>
> Is there an easier way of doing this, i. e. a way without need to
> transform the data?
>
> How can I change the colors for the data points 1 .. 4?
>
> I tried
>
> -- cut --
>
>   d_result,
>   aes(variable, y = n, fill = value)) +
>   geom_bar(stat = "identity") +
>   coord_cartesian(ylim = c(0,100)) +
>   scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>
> -- cut -
>
> but this does not work cause I am mixing continuous and descrete values.
>
> How can I change the colors for the bars?
>
> Kind regards
>
> Georg
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Way to Plot Multiple Variables and Change Color

Richard M. Heiberger
In reply to this post by G.Maubach
I think you are looking for the likert function in the HH package.
>From ?likert


Diverging stacked barcharts for Likert, semantic differential, rating
scale data, and population pyramids.


This will get you started.  Much more fine control is available.  See
the examples and demo.

## install.packages("HH") ## if not yet on your system.

library(HH)

AA <- dfr[,-9]

labels <- sort(unique(as.vector(data.matrix(AA))))
result.template <- integer(length(labels))
names(result.template) <- labels

BB <- apply(AA, 2, function(x, result=result.template) {
  tx <- table(x)
  result[names(tx)] <- tx
  result
}
)

BB

likert(t(BB), ReferenceZero=0, horizontal=FALSE)


On Tue, Mar 28, 2017 at 6:05 AM,  <[hidden email]> wrote:

> Hi All,
>
> in my current project I have to plot a whole bunch of related variables
> (item batteries, e.g. How do you rate ... a) Accelaration, b) Horse Power,
> c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.
>
> I need to present the results as stacked bar charts where the variables
> are columns and the percentages of the scales values (1 .. 4) are the
> chunks of the stacked bar for each variable. To do this I have transformed
> my data from wide to long and calculated the percentage for each variable
> and value. The code for this is as follows:
>
> -- cut --
>
> dfr <- structure(
>   list(
>     v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
>                4, 4, 4, 1, 1, 3, 3, 4),
>     v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
>                4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
>     v07_03 = c(3, 2, 2, 1, 4, 1,
>                2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
>     v07_04 = c(3, 1, 1,
>                4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
>     v07_05 = c(1,
>                2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
>     v07_06 = c(1,
>                2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
>     v07_07 = c(3,
>                2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
>     v07_08 = c(3,
>                2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
>     cased_id = structure(
>       1:20,
>       .Label = c(
>         "1",
>         "2",
>         "3",
>         "4",
>         "5",
>         "6",
>         "7",
>         "8",
>         "9",
>         "10",
>         "11",
>         "12",
>         "13",
>         "14",
>         "15",
>         "16",
>         "17",
>         "18",
>         "19",
>         "20"
>       ),
>       class = "factor"
>     )
>   ),
>   .Names = c(
>     "v07_01",
>     "v07_02",
>     "v07_03",
>     "v07_04",
>     "v07_05",
>     "v07_06",
>     "v07_07",
>     "v07_08",
>     "cased_id"
>   ),
>   row.names = c(NA, -20L),
>   class = c("tbl_df", "tbl",
>             "data.frame")
> )
>
> mdf <- melt(df)
> d_result <- mdf  %>%
>   dplyr::group_by(variable) %>%
>   count(value)
>
> ggplot(
>   d_result,
>   aes(variable, y = n, fill = value)) +
>   geom_bar(stat = "identity") +
>   coord_cartesian(ylim = c(0,100))
>
> -- cut --
>
> Is there an easier way of doing this, i. e. a way without need to
> transform the data?
>
> How can I change the colors for the data points 1 .. 4?
>
> I tried
>
> -- cut --
>
>   d_result,
>   aes(variable, y = n, fill = value)) +
>   geom_bar(stat = "identity") +
>   coord_cartesian(ylim = c(0,100)) +
>   scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>
> -- cut -
>
> but this does not work cause I am mixing continuous and descrete values.
>
> How can I change the colors for the bars?
>
> Kind regards
>
> Georg
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Antwort: Re: Way to Plot Multiple Variables and Change Color

G.Maubach
Hi Richard,

many thanks for your reply.

Your solution is not exactly what I was looking for. I would like to know
how I can change the colors of the stacked bars in my plot and not use the
default values. How can this be done?

Kind regards

Georg




Von:    "Richard M. Heiberger" <[hidden email]>
An:     [hidden email],
Kopie:  r-help <[hidden email]>
Datum:  28.03.2017 17:40
Betreff:        Re: [R] Way to Plot Multiple Variables and Change Color



I think you are looking for the likert function in the HH package.
>From ?likert


Diverging stacked barcharts for Likert, semantic differential, rating
scale data, and population pyramids.


This will get you started.  Much more fine control is available.  See
the examples and demo.

## install.packages("HH") ## if not yet on your system.

library(HH)

AA <- dfr[,-9]

labels <- sort(unique(as.vector(data.matrix(AA))))
result.template <- integer(length(labels))
names(result.template) <- labels

BB <- apply(AA, 2, function(x, result=result.template) {
  tx <- table(x)
  result[names(tx)] <- tx
  result
}
)

BB

likert(t(BB), ReferenceZero=0, horizontal=FALSE)


On Tue, Mar 28, 2017 at 6:05 AM,  <[hidden email]> wrote:
> Hi All,
>
> in my current project I have to plot a whole bunch of related variables
> (item batteries, e.g. How do you rate ... a) Accelaration, b) Horse
Power,
> c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.
>
> I need to present the results as stacked bar charts where the variables
> are columns and the percentages of the scales values (1 .. 4) are the
> chunks of the stacked bar for each variable. To do this I have
transformed
> my data from wide to long and calculated the percentage for each
variable

> and value. The code for this is as follows:
>
> -- cut --
>
> dfr <- structure(
>   list(
>     v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
>                4, 4, 4, 1, 1, 3, 3, 4),
>     v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
>                4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
>     v07_03 = c(3, 2, 2, 1, 4, 1,
>                2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
>     v07_04 = c(3, 1, 1,
>                4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
>     v07_05 = c(1,
>                2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
>     v07_06 = c(1,
>                2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
>     v07_07 = c(3,
>                2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
>     v07_08 = c(3,
>                2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
>     cased_id = structure(
>       1:20,
>       .Label = c(
>         "1",
>         "2",
>         "3",
>         "4",
>         "5",
>         "6",
>         "7",
>         "8",
>         "9",
>         "10",
>         "11",
>         "12",
>         "13",
>         "14",
>         "15",
>         "16",
>         "17",
>         "18",
>         "19",
>         "20"
>       ),
>       class = "factor"
>     )
>   ),
>   .Names = c(
>     "v07_01",
>     "v07_02",
>     "v07_03",
>     "v07_04",
>     "v07_05",
>     "v07_06",
>     "v07_07",
>     "v07_08",
>     "cased_id"
>   ),
>   row.names = c(NA, -20L),
>   class = c("tbl_df", "tbl",
>             "data.frame")
> )
>
> mdf <- melt(df)
> d_result <- mdf  %>%
>   dplyr::group_by(variable) %>%
>   count(value)
>
> ggplot(
>   d_result,
>   aes(variable, y = n, fill = value)) +
>   geom_bar(stat = "identity") +
>   coord_cartesian(ylim = c(0,100))
>
> -- cut --
>
> Is there an easier way of doing this, i. e. a way without need to
> transform the data?
>
> How can I change the colors for the data points 1 .. 4?
>
> I tried
>
> -- cut --
>
>   d_result,
>   aes(variable, y = n, fill = value)) +
>   geom_bar(stat = "identity") +
>   coord_cartesian(ylim = c(0,100)) +
>   scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>
> -- cut -
>
> but this does not work cause I am mixing continuous and descrete values.
>
> How can I change the colors for the bars?
>
> Kind regards
>
> Georg
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Way to Plot Multiple Variables and Change Color

Richard M. Heiberger
The colors can be specified with the standard lattice "col=" argument.

likert(t(BB), ReferenceZero=0, horizontal=FALSE,
       col=RColorBrewer::brewer.pal(4, "Blues"))

Most other customizations you might need are also possible.  Many examples
are in the examples section of ?likert and in the demo.

Rich


On Tue, Mar 28, 2017 at 8:56 AM,  <[hidden email]> wrote:

> Hi Richard,
>
> many thanks for your reply.
>
> Your solution is not exactly what I was looking for. I would like to know
> how I can change the colors of the stacked bars in my plot and not use the
> default values. How can this be done?
>
> Kind regards
>
> Georg
>
>
>
>
> Von:    "Richard M. Heiberger" <[hidden email]>
> An:     [hidden email],
> Kopie:  r-help <[hidden email]>
> Datum:  28.03.2017 17:40
> Betreff:        Re: [R] Way to Plot Multiple Variables and Change Color
>
>
>
> I think you are looking for the likert function in the HH package.
> From ?likert
>
>
> Diverging stacked barcharts for Likert, semantic differential, rating
> scale data, and population pyramids.
>
>
> This will get you started.  Much more fine control is available.  See
> the examples and demo.
>
> ## install.packages("HH") ## if not yet on your system.
>
> library(HH)
>
> AA <- dfr[,-9]
>
> labels <- sort(unique(as.vector(data.matrix(AA))))
> result.template <- integer(length(labels))
> names(result.template) <- labels
>
> BB <- apply(AA, 2, function(x, result=result.template) {
>   tx <- table(x)
>   result[names(tx)] <- tx
>   result
> }
> )
>
> BB
>
> likert(t(BB), ReferenceZero=0, horizontal=FALSE)
>
>
> On Tue, Mar 28, 2017 at 6:05 AM,  <[hidden email]> wrote:
>> Hi All,
>>
>> in my current project I have to plot a whole bunch of related variables
>> (item batteries, e.g. How do you rate ... a) Accelaration, b) Horse
> Power,
>> c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.
>>
>> I need to present the results as stacked bar charts where the variables
>> are columns and the percentages of the scales values (1 .. 4) are the
>> chunks of the stacked bar for each variable. To do this I have
> transformed
>> my data from wide to long and calculated the percentage for each
> variable
>> and value. The code for this is as follows:
>>
>> -- cut --
>>
>> dfr <- structure(
>>   list(
>>     v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
>>                4, 4, 4, 1, 1, 3, 3, 4),
>>     v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
>>                4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
>>     v07_03 = c(3, 2, 2, 1, 4, 1,
>>                2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
>>     v07_04 = c(3, 1, 1,
>>                4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
>>     v07_05 = c(1,
>>                2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
>>     v07_06 = c(1,
>>                2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
>>     v07_07 = c(3,
>>                2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
>>     v07_08 = c(3,
>>                2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
>>     cased_id = structure(
>>       1:20,
>>       .Label = c(
>>         "1",
>>         "2",
>>         "3",
>>         "4",
>>         "5",
>>         "6",
>>         "7",
>>         "8",
>>         "9",
>>         "10",
>>         "11",
>>         "12",
>>         "13",
>>         "14",
>>         "15",
>>         "16",
>>         "17",
>>         "18",
>>         "19",
>>         "20"
>>       ),
>>       class = "factor"
>>     )
>>   ),
>>   .Names = c(
>>     "v07_01",
>>     "v07_02",
>>     "v07_03",
>>     "v07_04",
>>     "v07_05",
>>     "v07_06",
>>     "v07_07",
>>     "v07_08",
>>     "cased_id"
>>   ),
>>   row.names = c(NA, -20L),
>>   class = c("tbl_df", "tbl",
>>             "data.frame")
>> )
>>
>> mdf <- melt(df)
>> d_result <- mdf  %>%
>>   dplyr::group_by(variable) %>%
>>   count(value)
>>
>> ggplot(
>>   d_result,
>>   aes(variable, y = n, fill = value)) +
>>   geom_bar(stat = "identity") +
>>   coord_cartesian(ylim = c(0,100))
>>
>> -- cut --
>>
>> Is there an easier way of doing this, i. e. a way without need to
>> transform the data?
>>
>> How can I change the colors for the data points 1 .. 4?
>>
>> I tried
>>
>> -- cut --
>>
>>   d_result,
>>   aes(variable, y = n, fill = value)) +
>>   geom_bar(stat = "identity") +
>>   coord_cartesian(ylim = c(0,100)) +
>>   scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>>
>> -- cut -
>>
>> but this does not work cause I am mixing continuous and descrete values.
>>
>> How can I change the colors for the bars?
>>
>> Kind regards
>>
>> Georg
>>
>> ______________________________________________
>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
>

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Antwort: Re: Way to Plot Multiple Variables and Change Color

G.Maubach
In reply to this post by Ulrik Stervbo-2
Hi Ulrik,

your answer is very valuable to me. If you do not know what I do, others
don't either. So I should definitely adapt my code.

The result of your code and my code is the same. Thus, I use your code
cause it is better readable.

My other question was how I can change the color palette for the stacked
bars. Could you give me a hint where I need to look in ggplot2
documentation?

Kind regards

Georg




Von:    Ulrik Stervbo <[hidden email]>
An:     [hidden email], [hidden email],
Datum:  28.03.2017 16:35
Betreff:        Re: [R] Way to Plot Multiple Variables and Change Color



Hi Georg,

I am a little unsure of what you want to do, but maybe this:

mdf <- melt(dfr)
d_result <- mdf  %>%
  dplyr::group_by(variable, value) %>%
  summarise(n = n())

ggplot(
  d_result,
  aes(variable, y = n, fill = value)) +
  geom_bar(stat = "identity")

HTH
Ulrik

On Tue, 28 Mar 2017 at 15:11 <[hidden email]> wrote:
Hi All,

in my current project I have to plot a whole bunch of related variables
(item batteries, e.g. How do you rate ... a) Accelaration, b) Horse Power,
c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.

I need to present the results as stacked bar charts where the variables
are columns and the percentages of the scales values (1 .. 4) are the
chunks of the stacked bar for each variable. To do this I have transformed
my data from wide to long and calculated the percentage for each variable
and value. The code for this is as follows:

-- cut --

dfr <- structure(
  list(
    v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
               4, 4, 4, 1, 1, 3, 3, 4),
    v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
               4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
    v07_03 = c(3, 2, 2, 1, 4, 1,
               2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
    v07_04 = c(3, 1, 1,
               4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
    v07_05 = c(1,
               2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
    v07_06 = c(1,
               2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
    v07_07 = c(3,
               2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
    v07_08 = c(3,
               2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
    cased_id = structure(
      1:20,
      .Label = c(
        "1",
        "2",
        "3",
        "4",
        "5",
        "6",
        "7",
        "8",
        "9",
        "10",
        "11",
        "12",
        "13",
        "14",
        "15",
        "16",
        "17",
        "18",
        "19",
        "20"
      ),
      class = "factor"
    )
  ),
  .Names = c(
    "v07_01",
    "v07_02",
    "v07_03",
    "v07_04",
    "v07_05",
    "v07_06",
    "v07_07",
    "v07_08",
    "cased_id"
  ),
  row.names = c(NA, -20L),
  class = c("tbl_df", "tbl",
            "data.frame")
)

mdf <- melt(df)
d_result <- mdf  %>%
  dplyr::group_by(variable) %>%
  count(value)

ggplot(
  d_result,
  aes(variable, y = n, fill = value)) +
  geom_bar(stat = "identity") +
  coord_cartesian(ylim = c(0,100))

-- cut --

Is there an easier way of doing this, i. e. a way without need to
transform the data?

How can I change the colors for the data points 1 .. 4?

I tried

-- cut --

  d_result,
  aes(variable, y = n, fill = value)) +
  geom_bar(stat = "identity") +
  coord_cartesian(ylim = c(0,100)) +
  scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))

-- cut -

but this does not work cause I am mixing continuous and descrete values.

How can I change the colors for the bars?

Kind regards

Georg

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Antwort: Re: Way to Plot Multiple Variables and Change Color

Ulrik Stervbo-2
In reply to this post by G.Maubach
Hi Georg,

you were on the right path - it is all about scale_fill*

The 'problem' as you've discovered is that value is continuous, but
applying scale_fill_manual or others (except scale_fill_gradient) expects
discrete values.

The solution is simply to set the fill with that by using factor():

ggplot(
  d_result,
  aes(variable, y = n, fill = factor(value))) +
  geom_bar(stat = "identity") +
scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
or:
 ggplot(
  d_result,
  aes(variable, y = n, fill = factor(value))) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("red","blue", "green", "purple"))

When using colorBrewer (which I highly recommend), I use scale_*_brewer
rather than setting the colour manually:

ggplot(
  d_result,
  aes(variable, y = n, fill = factor(value))) +
  geom_bar(stat = "identity") +
  scale_fill_brewer(palette = "Blues ")

Best,
Ulrik


On Tue, 28 Mar 2017 at 18:21 <[hidden email]> wrote:

> Hi Richard,
>
> many thanks for your reply.
>
> Your solution is not exactly what I was looking for. I would like to know
> how I can change the colors of the stacked bars in my plot and not use the
> default values. How can this be done?
>
> Kind regards
>
> Georg
>
>
>
>
> Von:    "Richard M. Heiberger" <[hidden email]>
> An:     [hidden email],
> Kopie:  r-help <[hidden email]>
> Datum:  28.03.2017 17:40
> Betreff:        Re: [R] Way to Plot Multiple Variables and Change Color
>
>
>
> I think you are looking for the likert function in the HH package.
> >From ?likert
>
>
> Diverging stacked barcharts for Likert, semantic differential, rating
> scale data, and population pyramids.
>
>
> This will get you started.  Much more fine control is available.  See
> the examples and demo.
>
> ## install.packages("HH") ## if not yet on your system.
>
> library(HH)
>
> AA <- dfr[,-9]
>
> labels <- sort(unique(as.vector(data.matrix(AA))))
> result.template <- integer(length(labels))
> names(result.template) <- labels
>
> BB <- apply(AA, 2, function(x, result=result.template) {
>   tx <- table(x)
>   result[names(tx)] <- tx
>   result
> }
> )
>
> BB
>
> likert(t(BB), ReferenceZero=0, horizontal=FALSE)
>
>
> On Tue, Mar 28, 2017 at 6:05 AM,  <[hidden email]> wrote:
> > Hi All,
> >
> > in my current project I have to plot a whole bunch of related variables
> > (item batteries, e.g. How do you rate ... a) Accelaration, b) Horse
> Power,
> > c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.
> >
> > I need to present the results as stacked bar charts where the variables
> > are columns and the percentages of the scales values (1 .. 4) are the
> > chunks of the stacked bar for each variable. To do this I have
> transformed
> > my data from wide to long and calculated the percentage for each
> variable
> > and value. The code for this is as follows:
> >
> > -- cut --
> >
> > dfr <- structure(
> >   list(
> >     v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
> >                4, 4, 4, 1, 1, 3, 3, 4),
> >     v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
> >                4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
> >     v07_03 = c(3, 2, 2, 1, 4, 1,
> >                2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
> >     v07_04 = c(3, 1, 1,
> >                4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
> >     v07_05 = c(1,
> >                2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
> >     v07_06 = c(1,
> >                2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
> >     v07_07 = c(3,
> >                2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
> >     v07_08 = c(3,
> >                2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
> >     cased_id = structure(
> >       1:20,
> >       .Label = c(
> >         "1",
> >         "2",
> >         "3",
> >         "4",
> >         "5",
> >         "6",
> >         "7",
> >         "8",
> >         "9",
> >         "10",
> >         "11",
> >         "12",
> >         "13",
> >         "14",
> >         "15",
> >         "16",
> >         "17",
> >         "18",
> >         "19",
> >         "20"
> >       ),
> >       class = "factor"
> >     )
> >   ),
> >   .Names = c(
> >     "v07_01",
> >     "v07_02",
> >     "v07_03",
> >     "v07_04",
> >     "v07_05",
> >     "v07_06",
> >     "v07_07",
> >     "v07_08",
> >     "cased_id"
> >   ),
> >   row.names = c(NA, -20L),
> >   class = c("tbl_df", "tbl",
> >             "data.frame")
> > )
> >
> > mdf <- melt(df)
> > d_result <- mdf  %>%
> >   dplyr::group_by(variable) %>%
> >   count(value)
> >
> > ggplot(
> >   d_result,
> >   aes(variable, y = n, fill = value)) +
> >   geom_bar(stat = "identity") +
> >   coord_cartesian(ylim = c(0,100))
> >
> > -- cut --
> >
> > Is there an easier way of doing this, i. e. a way without need to
> > transform the data?
> >
> > How can I change the colors for the data points 1 .. 4?
> >
> > I tried
> >
> > -- cut --
> >
> >   d_result,
> >   aes(variable, y = n, fill = value)) +
> >   geom_bar(stat = "identity") +
> >   coord_cartesian(ylim = c(0,100)) +
> >   scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
> >
> > -- cut -
> >
> > but this does not work cause I am mixing continuous and descrete values.
> >
> > How can I change the colors for the bars?
> >
> > Kind regards
> >
> > Georg
> >
> > ______________________________________________
> > [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Antwort: Re: Antwort: Re: Way to Plot Multiple Variables and Change Color

G.Maubach
Hi Ulrik,

many thanks for your reply. I had to take an unplanned break and was not
in the office during the last two weeks. Thus my late reply.

I followed your advice and converted the variable in argument "fill" to
factor. Now the color change works:

-- cut --

d_result <- structure(list("variable" = c("Item 1 (ø = 3.3) ", "Item 1 (ø
= 3.3) ",
                                        "Item 1 (ø = 3.3) ", "Item 1 (ø =
3.3) ", "Item 1 (ø = 3.3) ",
                                        "Item 1 (ø = 3.3) ", "Item 2 (ø =
3.8) ", "Item 2 (ø = 3.8) ",
                                        "Item 2 (ø = 3.8) ", "Item 2 (ø =
3.8) ", "Item 2 (ø = 3.8) ",
                                        "Item 2 (ø = 3.8) ", "Item 3 (ø =
3.4) ", "Item 3 (ø = 3.4) ",
                                        "Item 3 (ø = 3.4) ", "Item 3 (ø =
3.4) ", "Item 3 (ø = 3.4) ",
                                        "Item 3 (ø = 3.4) ", "Item 4 (ø =
3.4) ", "Item 4 (ø = 3.4) ",
                                        "Item 4 (ø = 3.4) ", "Item 4 (ø =
3.4) ", "Item 4 (ø = 3.4) ",
                                        "Item 4 (ø = 3.4) ", "Item 5 (ø =
3.5) ", "Item 5 (ø = 3.5) ",
                                        "Item 5 (ø = 3.5) ", "Item 5 (ø =
3.5) ", "Item 5 (ø = 3.5) ",
                                        "Item 5 (ø = 3.5) ", "Item 6 (ø =
3.5) ", "Item 6 (ø = 3.5) ",
                                        "Item 6 (ø = 3.5) ", "Item 6 (ø =
3.5) ", "Item 6 (ø = 3.5) ",
                                        "Item 6 (ø = 3.5) ", "Item 7 (ø =
3.4) ", "Item 7 (ø = 3.4) ",
                                        "Item 7 (ø = 3.4) ", "Item 7 (ø =
3.4) ", "Item 7 (ø = 3.4) ",
                                        "Item 7 (ø = 3.4) ", "Item 8 (ø =
3.3) ", "Item 8 (ø = 3.3) ",
                                        "Item 8 (ø = 3.3) ", "Item 8 (ø =
3.3) ", "Item 8 (ø = 3.3) ",
                                        "Item 8 (ø = 3.3) "), value =
structure(c(1L, 2L, 3L, 4L, 5L,
        6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L,
        4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L,
        2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L), .Label = c("1 = very
satisfied",
                                                                "2", "3",
"4", "5", "6 = very dissatified"), class = "factor"),
                           n = c(14L, 20L, 24L, 14L, 16L, 14L, 9L, 15L,
21L, 20L, 14L,
                                 23L, 19L, 17L, 16L, 14L, 16L, 20L, 22L,
17L, 15L, 16L, 20L,
                                 12L, 19L, 15L, 16L, 15L, 18L, 19L, 18L,
15L, 18L, 18L, 16L,
                                 17L, 17L, 20L, 17L, 17L, 14L, 16L, 16L,
25L, 16L, 17L, 8L,
                                 20L)), .Names = c("variable", "value",
"n"), row.names =
                        c(NA,
                          -48L), vars = list("variable"), drop = TRUE,
indices =
                        list(0:5,
                             6:11, 12:17, 18:23, 24:29, 30:35, 36:41,
42:47),
                      group_sizes = c(6L,
                                      6L, 6L, 6L, 6L, 6L, 6L, 6L),
                      biggest_group_size = 6L,
                      labels = structure(list(
                        "variable" = structure(1:8, .Label = c("Item 1 (ø
= 3.3) ",
                                                             "Item 2 (ø =
3.8) ", "Item 3 (ø = 3.4) ", "Item 4 (ø = 3.4) ",
                                                             "Item 5 (ø =
3.5) ", "Item 6 (ø = 3.5) ", "Item 7 (ø = 3.4) ",
                                                             "Item 8 (ø =
3.3) "), class = "factor")),
                        row.names = c(NA,
                                      -8L), class = "data.frame", vars =
list("variable"),
                        drop = TRUE, .Names = "variable"),
                      class = c("grouped_df",
                                "tbl_df", "tbl", "data.frame"))

ggplot(
  d_result,
  aes(x = variable, y = n, fill = rev(factor(value)))) +
  geom_bar(
    stat = "identity") +
  coord_cartesian(ylim = c(0,100)) +
  coord_flip() +
  scale_y_continuous(name = "Percent") +
  scale_fill_manual(
    values = rev(
      c(
        "forestgreen", "limegreen",
        "gold", "orange1",
        "tomato3", "darkred"))) +
  ggtitle(
    paste(
      "Question 8: Satisfaction?")) +
  labs(fill = "Rating") +
  scale_x_discrete(
    name = element_blank()) +
  # scale_color_manual(
  #   values = rev(
  #     c(
  #       "forestgreen", "limegreen",
  #       "gold", "orange1",
  #       "tomato3", "darkred"))) +
  geom_text(
    aes(label = n),
    color = "white",
    position = position_stack(vjust = 0.5)) +
  theme_minimal() +
  theme(
    legend.position = "right")

-- cut --

I tried to change the order of the items on the y-axis,  e.g. Item 8
should be last and Item 1 first. I tried to reverse the order of the items
within ggplot using rev() and relevel(). But neither of them worked. Is
there a way to do it?

I also tried to adjust the color palette for the legend, e.g. 1 = very
satisfied is green, 6 = very dissatified is red instead of vice versa as
it is now. The result should ensure the item naming for 1 = satisfied and
6 = unsatifies cause this is the way it was asked in the questionnaire.

Thus my question is:

1. How can I change the order of the sequence for the y-axis?

2. How can I adjust the color palette of the legend that it matches the
correct items?

Can you give me a hint which functions I could use to do it?

Kind regards

Georg




Von:    Ulrik Stervbo <[hidden email]>
An:     [hidden email], "Richard M. Heiberger" <[hidden email]>,
Kopie:  r-help <[hidden email]>
Datum:  28.03.2017 18:32
Betreff:        Re: [R] Antwort: Re: Way to Plot Multiple Variables and
Change Color



Hi Georg,

you were on the right path - it is all about scale_fill*

The 'problem' as you've discovered is that value is continuous, but
applying scale_fill_manual or others (except scale_fill_gradient) expects
discrete values.

The solution is simply to set the fill with that by using factor():

ggplot(
  d_result,
  aes(variable, y = n, fill = factor(value))) +
  geom_bar(stat = "identity") +
scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
or:
 ggplot(
  d_result,
  aes(variable, y = n, fill = factor(value))) +
  geom_bar(stat = "identity") +
  scale_fill_manual(values = c("red","blue", "green", "purple"))

When using colorBrewer (which I highly recommend), I use scale_*_brewer
rather than setting the colour manually:

ggplot(
  d_result,
  aes(variable, y = n, fill = factor(value))) +
  geom_bar(stat = "identity") +
  scale_fill_brewer(palette = "Blues ")

Best,
Ulrik
 

On Tue, 28 Mar 2017 at 18:21 <[hidden email]> wrote:
Hi Richard,

many thanks for your reply.

Your solution is not exactly what I was looking for. I would like to know
how I can change the colors of the stacked bars in my plot and not use the
default values. How can this be done?

Kind regards

Georg




Von:    "Richard M. Heiberger" <[hidden email]>
An:     [hidden email],
Kopie:  r-help <[hidden email]>
Datum:  28.03.2017 17:40
Betreff:        Re: [R] Way to Plot Multiple Variables and Change Color



I think you are looking for the likert function in the HH package.
>From ?likert


Diverging stacked barcharts for Likert, semantic differential, rating
scale data, and population pyramids.


This will get you started.  Much more fine control is available.  See
the examples and demo.

## install.packages("HH") ## if not yet on your system.

library(HH)

AA <- dfr[,-9]

labels <- sort(unique(as.vector(data.matrix(AA))))
result.template <- integer(length(labels))
names(result.template) <- labels

BB <- apply(AA, 2, function(x, result=result.template) {
  tx <- table(x)
  result[names(tx)] <- tx
  result
}
)

BB

likert(t(BB), ReferenceZero=0, horizontal=FALSE)


On Tue, Mar 28, 2017 at 6:05 AM,  <[hidden email]> wrote:
> Hi All,
>
> in my current project I have to plot a whole bunch of related variables
> (item batteries, e.g. How do you rate ... a) Accelaration, b) Horse
Power,
> c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.
>
> I need to present the results as stacked bar charts where the variables
> are columns and the percentages of the scales values (1 .. 4) are the
> chunks of the stacked bar for each variable. To do this I have
transformed
> my data from wide to long and calculated the percentage for each
variable

> and value. The code for this is as follows:
>
> -- cut --
>
> dfr <- structure(
>   list(
>     v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
>                4, 4, 4, 1, 1, 3, 3, 4),
>     v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
>                4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
>     v07_03 = c(3, 2, 2, 1, 4, 1,
>                2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
>     v07_04 = c(3, 1, 1,
>                4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
>     v07_05 = c(1,
>                2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
>     v07_06 = c(1,
>                2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
>     v07_07 = c(3,
>                2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
>     v07_08 = c(3,
>                2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
>     cased_id = structure(
>       1:20,
>       .Label = c(
>         "1",
>         "2",
>         "3",
>         "4",
>         "5",
>         "6",
>         "7",
>         "8",
>         "9",
>         "10",
>         "11",
>         "12",
>         "13",
>         "14",
>         "15",
>         "16",
>         "17",
>         "18",
>         "19",
>         "20"
>       ),
>       class = "factor"
>     )
>   ),
>   .Names = c(
>     "v07_01",
>     "v07_02",
>     "v07_03",
>     "v07_04",
>     "v07_05",
>     "v07_06",
>     "v07_07",
>     "v07_08",
>     "cased_id"
>   ),
>   row.names = c(NA, -20L),
>   class = c("tbl_df", "tbl",
>             "data.frame")
> )
>
> mdf <- melt(df)
> d_result <- mdf  %>%
>   dplyr::group_by(variable) %>%
>   count(value)
>
> ggplot(
>   d_result,
>   aes(variable, y = n, fill = value)) +
>   geom_bar(stat = "identity") +
>   coord_cartesian(ylim = c(0,100))
>
> -- cut --
>
> Is there an easier way of doing this, i. e. a way without need to
> transform the data?
>
> How can I change the colors for the data points 1 .. 4?
>
> I tried
>
> -- cut --
>
>   d_result,
>   aes(variable, y = n, fill = value)) +
>   geom_bar(stat = "identity") +
>   coord_cartesian(ylim = c(0,100)) +
>   scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>
> -- cut -
>
> but this does not work cause I am mixing continuous and descrete values.
>
> How can I change the colors for the bars?
>
> Kind regards
>
> Georg
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Antwort: Re: Antwort: Re: Way to Plot Multiple Variables and Change Color

David Winsemius

> On Apr 10, 2017, at 7:45 AM, [hidden email] wrote:
>
> Hi Ulrik,
>
> many thanks for your reply. I had to take an unplanned break and was not
> in the office during the last two weeks. Thus my late reply.
>
> I followed your advice and converted the variable in argument "fill" to
> factor. Now the color change works:
>
> -- cut --
>
> d_result <- structure(list("variable" = c("Item 1 (ø = 3.3) ", "Item 1 (ø
> = 3.3) ",
>                                        "Item 1 (ø = 3.3) ", "Item 1 (ø =
> 3.3) ", "Item 1 (ø = 3.3) ",
>                                        "Item 1 (ø = 3.3) ", "Item 2 (ø =
> 3.8) ", "Item 2 (ø = 3.8) ",
>                                        "Item 2 (ø = 3.8) ", "Item 2 (ø =
> 3.8) ", "Item 2 (ø = 3.8) ",
>                                        "Item 2 (ø = 3.8) ", "Item 3 (ø =
> 3.4) ", "Item 3 (ø = 3.4) ",
>                                        "Item 3 (ø = 3.4) ", "Item 3 (ø =
> 3.4) ", "Item 3 (ø = 3.4) ",
>                                        "Item 3 (ø = 3.4) ", "Item 4 (ø =
> 3.4) ", "Item 4 (ø = 3.4) ",
>                                        "Item 4 (ø = 3.4) ", "Item 4 (ø =
> 3.4) ", "Item 4 (ø = 3.4) ",
>                                        "Item 4 (ø = 3.4) ", "Item 5 (ø =
> 3.5) ", "Item 5 (ø = 3.5) ",
>                                        "Item 5 (ø = 3.5) ", "Item 5 (ø =
> 3.5) ", "Item 5 (ø = 3.5) ",
>                                        "Item 5 (ø = 3.5) ", "Item 6 (ø =
> 3.5) ", "Item 6 (ø = 3.5) ",
>                                        "Item 6 (ø = 3.5) ", "Item 6 (ø =
> 3.5) ", "Item 6 (ø = 3.5) ",
>                                        "Item 6 (ø = 3.5) ", "Item 7 (ø =
> 3.4) ", "Item 7 (ø = 3.4) ",
>                                        "Item 7 (ø = 3.4) ", "Item 7 (ø =
> 3.4) ", "Item 7 (ø = 3.4) ",
>                                        "Item 7 (ø = 3.4) ", "Item 8 (ø =
> 3.3) ", "Item 8 (ø = 3.3) ",
>                                        "Item 8 (ø = 3.3) ", "Item 8 (ø =
> 3.3) ", "Item 8 (ø = 3.3) ",
>                                        "Item 8 (ø = 3.3) "), value =
> structure(c(1L, 2L, 3L, 4L, 5L,
>        6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L,
>        4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L,
>        2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L), .Label = c("1 = very
> satisfied",
>                                                                "2", "3",
> "4", "5", "6 = very dissatified"), class = "factor"),
>                           n = c(14L, 20L, 24L, 14L, 16L, 14L, 9L, 15L,
> 21L, 20L, 14L,
>                                 23L, 19L, 17L, 16L, 14L, 16L, 20L, 22L,
> 17L, 15L, 16L, 20L,
>                                 12L, 19L, 15L, 16L, 15L, 18L, 19L, 18L,
> 15L, 18L, 18L, 16L,
>                                 17L, 17L, 20L, 17L, 17L, 14L, 16L, 16L,
> 25L, 16L, 17L, 8L,
>                                 20L)), .Names = c("variable", "value",
> "n"), row.names =
>                        c(NA,
>                          -48L), vars = list("variable"), drop = TRUE,
> indices =
>                        list(0:5,
>                             6:11, 12:17, 18:23, 24:29, 30:35, 36:41,
> 42:47),
>                      group_sizes = c(6L,
>                                      6L, 6L, 6L, 6L, 6L, 6L, 6L),
>                      biggest_group_size = 6L,
>                      labels = structure(list(
>                        "variable" = structure(1:8, .Label = c("Item 1 (ø
> = 3.3) ",
>                                                             "Item 2 (ø =
> 3.8) ", "Item 3 (ø = 3.4) ", "Item 4 (ø = 3.4) ",
>                                                             "Item 5 (ø =
> 3.5) ", "Item 6 (ø = 3.5) ", "Item 7 (ø = 3.4) ",
>                                                             "Item 8 (ø =
> 3.3) "), class = "factor")),
>                        row.names = c(NA,
>                                      -8L), class = "data.frame", vars =
> list("variable"),
>                        drop = TRUE, .Names = "variable"),
>                      class = c("grouped_df",
>                                "tbl_df", "tbl", "data.frame"))
>
> ggplot(
>  d_result,
>  aes(x = variable, y = n, fill = rev(factor(value)))) +
>  geom_bar(
>    stat = "identity") +
>  coord_cartesian(ylim = c(0,100)) +
>  coord_flip() +
>  scale_y_continuous(name = "Percent") +
>  scale_fill_manual(
>    values = rev(
>      c(
>        "forestgreen", "limegreen",
>        "gold", "orange1",
>        "tomato3", "darkred"))) +
>  ggtitle(
>    paste(
>      "Question 8: Satisfaction?")) +
>  labs(fill = "Rating") +
>  scale_x_discrete(
>    name = element_blank()) +
>  # scale_color_manual(
>  #   values = rev(
>  #     c(
>  #       "forestgreen", "limegreen",
>  #       "gold", "orange1",
>  #       "tomato3", "darkred"))) +
>  geom_text(
>    aes(label = n),
>    color = "white",
>    position = position_stack(vjust = 0.5)) +
>  theme_minimal() +
>  theme(
>    legend.position = "right")
>
> -- cut --
>
> I tried to change the order of the items on the y-axis,  e.g. Item 8
> should be last and Item 1 first.

"First" and "last" apparently mean "top" and "bottom" to you. Since the $variable column is character, and ordering is typically done by setting levels of factors, try:

d_result$variable <- factor(d_result$variable, levels=rev(unique(d_result$variable)))


# changes ordering so the "Item 1"'s are at the top.


> I tried to reverse the order of the items
> within ggplot using rev() and relevel(). But neither of them worked. Is
> there a way to do it?

I don't think you can relevel a character column.

>
> I also tried to adjust the color palette for the legend, e.g. 1 = very
> satisfied is green, 6 = very dissatified is red instead of vice versa as
> it is now. The result should ensure the item naming for 1 = satisfied and
> 6 = unsatifies cause this is the way it was asked in the questionnaire.
>
> Thus my question is:
>
> 1. How can I change the order of the sequence for the y-axis?
>
> 2. How can I adjust the color palette of the legend that it matches the
> correct items?

You probably could use relevel sinc `value` was a factor but I found it easier to simply repeat the relevelling code and change the target column name:

d_result$value <- factor(d_result$value, levels=rev(unique(d_result$value)))

I did find the appearance of the final result stange because there was irregular use of "\n" in the "variable" character values. that created more items than I think you wanted to appear.

HTH;
David.

>
> Can you give me a hint which functions I could use to do it?
>
> Kind regards
>
> Georg
>
>
>
>
> Von:    Ulrik Stervbo <[hidden email]>
> An:     [hidden email], "Richard M. Heiberger" <[hidden email]>,
> Kopie:  r-help <[hidden email]>
> Datum:  28.03.2017 18:32
> Betreff:        Re: [R] Antwort: Re: Way to Plot Multiple Variables and
> Change Color
>
>
>
> Hi Georg,
>
> you were on the right path - it is all about scale_fill*
>
> The 'problem' as you've discovered is that value is continuous, but
> applying scale_fill_manual or others (except scale_fill_gradient) expects
> discrete values.
>
> The solution is simply to set the fill with that by using factor():
>
> ggplot(
>  d_result,
>  aes(variable, y = n, fill = factor(value))) +
>  geom_bar(stat = "identity") +
> scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
> or:
> ggplot(
>  d_result,
>  aes(variable, y = n, fill = factor(value))) +
>  geom_bar(stat = "identity") +
>  scale_fill_manual(values = c("red","blue", "green", "purple"))
>
> When using colorBrewer (which I highly recommend), I use scale_*_brewer
> rather than setting the colour manually:
>
> ggplot(
>  d_result,
>  aes(variable, y = n, fill = factor(value))) +
>  geom_bar(stat = "identity") +
>  scale_fill_brewer(palette = "Blues ")
>
> Best,
> Ulrik
>
>
> On Tue, 28 Mar 2017 at 18:21 <[hidden email]> wrote:
> Hi Richard,
>
> many thanks for your reply.
>
> Your solution is not exactly what I was looking for. I would like to know
> how I can change the colors of the stacked bars in my plot and not use the
> default values. How can this be done?
>
> Kind regards
>
> Georg
>
>
>
>
> Von:    "Richard M. Heiberger" <[hidden email]>
> An:     [hidden email],
> Kopie:  r-help <[hidden email]>
> Datum:  28.03.2017 17:40
> Betreff:        Re: [R] Way to Plot Multiple Variables and Change Color
>
>
>
> I think you are looking for the likert function in the HH package.
>> From ?likert
>
>
> Diverging stacked barcharts for Likert, semantic differential, rating
> scale data, and population pyramids.
>
>
> This will get you started.  Much more fine control is available.  See
> the examples and demo.
>
> ## install.packages("HH") ## if not yet on your system.
>
> library(HH)
>
> AA <- dfr[,-9]
>
> labels <- sort(unique(as.vector(data.matrix(AA))))
> result.template <- integer(length(labels))
> names(result.template) <- labels
>
> BB <- apply(AA, 2, function(x, result=result.template) {
>  tx <- table(x)
>  result[names(tx)] <- tx
>  result
> }
> )
>
> BB
>
> likert(t(BB), ReferenceZero=0, horizontal=FALSE)
>
>
> On Tue, Mar 28, 2017 at 6:05 AM,  <[hidden email]> wrote:
>> Hi All,
>>
>> in my current project I have to plot a whole bunch of related variables
>> (item batteries, e.g. How do you rate ... a) Accelaration, b) Horse
> Power,
>> c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.
>>
>> I need to present the results as stacked bar charts where the variables
>> are columns and the percentages of the scales values (1 .. 4) are the
>> chunks of the stacked bar for each variable. To do this I have
> transformed
>> my data from wide to long and calculated the percentage for each
> variable
>> and value. The code for this is as follows:
>>
>> -- cut --
>>
>> dfr <- structure(
>>  list(
>>    v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
>>               4, 4, 4, 1, 1, 3, 3, 4),
>>    v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
>>               4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
>>    v07_03 = c(3, 2, 2, 1, 4, 1,
>>               2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
>>    v07_04 = c(3, 1, 1,
>>               4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
>>    v07_05 = c(1,
>>               2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
>>    v07_06 = c(1,
>>               2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
>>    v07_07 = c(3,
>>               2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
>>    v07_08 = c(3,
>>               2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
>>    cased_id = structure(
>>      1:20,
>>      .Label = c(
>>        "1",
>>        "2",
>>        "3",
>>        "4",
>>        "5",
>>        "6",
>>        "7",
>>        "8",
>>        "9",
>>        "10",
>>        "11",
>>        "12",
>>        "13",
>>        "14",
>>        "15",
>>        "16",
>>        "17",
>>        "18",
>>        "19",
>>        "20"
>>      ),
>>      class = "factor"
>>    )
>>  ),
>>  .Names = c(
>>    "v07_01",
>>    "v07_02",
>>    "v07_03",
>>    "v07_04",
>>    "v07_05",
>>    "v07_06",
>>    "v07_07",
>>    "v07_08",
>>    "cased_id"
>>  ),
>>  row.names = c(NA, -20L),
>>  class = c("tbl_df", "tbl",
>>            "data.frame")
>> )
>>
>> mdf <- melt(df)
>> d_result <- mdf  %>%
>>  dplyr::group_by(variable) %>%
>>  count(value)
>>
>> ggplot(
>>  d_result,
>>  aes(variable, y = n, fill = value)) +
>>  geom_bar(stat = "identity") +
>>  coord_cartesian(ylim = c(0,100))
>>
>> -- cut --
>>
>> Is there an easier way of doing this, i. e. a way without need to
>> transform the data?
>>
>> How can I change the colors for the data points 1 .. 4?
>>
>> I tried
>>
>> -- cut --
>>
>>  d_result,
>>  aes(variable, y = n, fill = value)) +
>>  geom_bar(stat = "identity") +
>>  coord_cartesian(ylim = c(0,100)) +
>>  scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>>
>> -- cut -
>>
>> but this does not work cause I am mixing continuous and descrete values.
>>
>> How can I change the colors for the bars?
>>
>> Kind regards
>>
>> Georg
>>
>> ______________________________________________
>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius
Alameda, CA, USA

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Antwort: Re: Antwort: Re: Way to Plot Multiple Variables and Change Color

David Winsemius

> On Apr 10, 2017, at 1:06 PM, David Winsemius <[hidden email]> wrote:
>
>
>> On Apr 10, 2017, at 7:45 AM, [hidden email] wrote:
>>
>> Hi Ulrik,
>>
>> many thanks for your reply. I had to take an unplanned break and was not
>> in the office during the last two weeks. Thus my late reply.
>>
>> I followed your advice and converted the variable in argument "fill" to
>> factor. Now the color change works:
>>
>> -- cut --
>>
>> d_result <- structure(list("variable" = c("Item 1 (ø = 3.3) ", "Item 1 (ø = 3.3) ",
>>                                       "Item 1 (ø = 3.3) ", "Item 1 (ø = 3.3) ", "Item 1 (ø = 3.3) ",
>>                                       "Item 1 (ø = 3.3) ", "Item 2 (ø = 3.8) ", "Item 2 (ø = 3.8) ",
>>                                       "Item 2 (ø = 3.8) ", "Item 2 (ø = 3.8) ", "Item 2 (ø = 3.8) ",
>>                                       "Item 2 (ø = 3.8) ", "Item 3 (ø = 3.4) ", "Item 3 (ø = 3.4) ",
>>                                       "Item 3 (ø = 3.4) ", "Item 3 (ø = 3.4) ", "Item 3 (ø = 3.4) ",
>>                                       "Item 3 (ø = 3.4) ", "Item 4 (ø = 3.4) ", "Item 4 (ø = 3.4) ",
>>                                       "Item 4 (ø = 3.4) ", "Item 4 (ø = 3.4) ", "Item 4 (ø = 3.4) ",
>>                                       "Item 4 (ø = 3.4) ", "Item 5 (ø = 3.5) ", "Item 5 (ø = 3.5) ",
>>                                       "Item 5 (ø = 3.5) ", "Item 5 (ø = 3.5) ", "Item 5 (ø = 3.5) ",
>>                                       "Item 5 (ø = 3.5) ", "Item 6 (ø = 3.5) ", "Item 6 (ø = 3.5) ",
>>                                       "Item 6 (ø = 3.5) ", "Item 6 (ø = 3.5) ", "Item 6 (ø = 3.5) ",
>>                                       "Item 6 (ø = 3.5) ", "Item 7 (ø = 3.4) ", "Item 7 (ø = 3.4) ",
>>                                       "Item 7 (ø = 3.4) ", "Item 7 (ø = 3.4) ", "Item 7 (ø = 3.4) ",
>>                                       "Item 7 (ø = 3.4) ", "Item 8 (ø = 3.3) ", "Item 8 (ø = 3.3) ",
>>                                       "Item 8 (ø = 3.3) ", "Item 8 (ø = 3.3) ", "Item 8 (ø = 3.3) ",
>>                                       "Item 8 (ø = 3.3) "), value =
>> structure(c(1L, 2L, 3L, 4L, 5L,
>>       6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L,
>>       4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L,
>>       2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L), .Label = c("1 = very
>> satisfied",
>>                                                               "2", "3",
>> "4", "5", "6 = very dissatified"), class = "factor"),
>>                          n = c(14L, 20L, 24L, 14L, 16L, 14L, 9L, 15L,
>> 21L, 20L, 14L,
>>                                23L, 19L, 17L, 16L, 14L, 16L, 20L, 22L,
>> 17L, 15L, 16L, 20L,
>>                                12L, 19L, 15L, 16L, 15L, 18L, 19L, 18L,
>> 15L, 18L, 18L, 16L,
>>                                17L, 17L, 20L, 17L, 17L, 14L, 16L, 16L,
>> 25L, 16L, 17L, 8L,
>>                                20L)), .Names = c("variable", "value",
>> "n"), row.names =
>>                       c(NA,
>>                         -48L), vars = list("variable"), drop = TRUE,
>> indices =
>>                       list(0:5,
>>                            6:11, 12:17, 18:23, 24:29, 30:35, 36:41,
>> 42:47),
>>                     group_sizes = c(6L,
>>                                     6L, 6L, 6L, 6L, 6L, 6L, 6L),
>>                     biggest_group_size = 6L,
>>                     labels = structure(list(
>>                       "variable" = structure(1:8, .Label = c("Item 1 (ø
>> = 3.3) ",
>>                                                            "Item 2 (ø =
>> 3.8) ", "Item 3 (ø = 3.4) ", "Item 4 (ø = 3.4) ",
>>                                                            "Item 5 (ø =
>> 3.5) ", "Item 6 (ø = 3.5) ", "Item 7 (ø = 3.4) ",
>>                                                            "Item 8 (ø =
>> 3.3) "), class = "factor")),
>>                       row.names = c(NA,
>>                                     -8L), class = "data.frame", vars =
>> list("variable"),
>>                       drop = TRUE, .Names = "variable"),
>>                     class = c("grouped_df",
>>                               "tbl_df", "tbl", "data.frame"))
>>
>> ggplot(
>> d_result,
>> aes(x = variable, y = n, fill = rev(factor(value)))) +
>> geom_bar(
>>   stat = "identity") +
>> coord_cartesian(ylim = c(0,100)) +
>> coord_flip() +
>> scale_y_continuous(name = "Percent") +
>> scale_fill_manual(
>>   values = rev(
>>     c(
>>       "forestgreen", "limegreen",
>>       "gold", "orange1",
>>       "tomato3", "darkred"))) +
>> ggtitle(
>>   paste(
>>     "Question 8: Satisfaction?")) +
>> labs(fill = "Rating") +
>> scale_x_discrete(
>>   name = element_blank()) +
>> # scale_color_manual(
>> #   values = rev(
>> #     c(
>> #       "forestgreen", "limegreen",
>> #       "gold", "orange1",
>> #       "tomato3", "darkred"))) +
>> geom_text(
>>   aes(label = n),
>>   color = "white",
>>   position = position_stack(vjust = 0.5)) +
>> theme_minimal() +
>> theme(
>>   legend.position = "right")
>>
>> -- cut --
>>
>> I tried to change the order of the items on the y-axis,  e.g. Item 8
>> should be last and Item 1 first.
>
> "First" and "last" apparently mean "top" and "bottom" to you. Since the $variable column is character, and ordering is typically done by setting levels of factors, try:
>
> d_result$variable <- factor(d_result$variable, levels=rev(unique(d_result$variable)))
>
>
> # changes ordering so the "Item 1"'s are at the top.
>
>
>> I tried to reverse the order of the items
>> within ggplot using rev() and relevel(). But neither of them worked. Is
>> there a way to do it?
>
> I don't think you can relevel a character column.
>>
>> I also tried to adjust the color palette for the legend, e.g. 1 = very
>> satisfied is green, 6 = very dissatified is red instead of vice versa as
>> it is now. The result should ensure the item naming for 1 = satisfied and
>> 6 = unsatifies cause this is the way it was asked in the questionnaire.
>>
>> Thus my question is:
>>
>> 1. How can I change the order of the sequence for the y-axis?
>>
>> 2. How can I adjust the color palette of the legend that it matches the
>> correct items?
>
> You probably could use relevel sinc `value` was a factor but I found it easier to simply repeat the relevelling code and change the target column name:
>
> d_result$value <- factor(d_result$value, levels=rev(unique(d_result$value)))
>
> I did find the appearance of the final result stange because there was irregular use of "\n" in the "variable" character values. that created more items than I think you wanted to appear.
I edited the code above to take out the inadvertent linefeeds (which got inserted by some part of the mail-processing chain) and then ran the ggplot call inside pdf() and print(...):




HTH;
David.


>>
>> Can you give me a hint which functions I could use to do it?
>>
>> Kind regards
>>
>> Georg
>>
>>
>>
>>
>> Von:    Ulrik Stervbo <[hidden email]>
>> An:     [hidden email], "Richard M. Heiberger" <[hidden email]>,
>> Kopie:  r-help <[hidden email]>
>> Datum:  28.03.2017 18:32
>> Betreff:        Re: [R] Antwort: Re: Way to Plot Multiple Variables and
>> Change Color
>>
>>
>>
>> Hi Georg,
>>
>> you were on the right path - it is all about scale_fill*
>>
>> The 'problem' as you've discovered is that value is continuous, but
>> applying scale_fill_manual or others (except scale_fill_gradient) expects
>> discrete values.
>>
>> The solution is simply to set the fill with that by using factor():
>>
>> ggplot(
>> d_result,
>> aes(variable, y = n, fill = factor(value))) +
>> geom_bar(stat = "identity") +
>> scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>> or:
>> ggplot(
>> d_result,
>> aes(variable, y = n, fill = factor(value))) +
>> geom_bar(stat = "identity") +
>> scale_fill_manual(values = c("red","blue", "green", "purple"))
>>
>> When using colorBrewer (which I highly recommend), I use scale_*_brewer
>> rather than setting the colour manually:
>>
>> ggplot(
>> d_result,
>> aes(variable, y = n, fill = factor(value))) +
>> geom_bar(stat = "identity") +
>> scale_fill_brewer(palette = "Blues ")
>>
>> Best,
>> Ulrik
>>
>>
>> On Tue, 28 Mar 2017 at 18:21 <[hidden email]> wrote:
>> Hi Richard,
>>
>> many thanks for your reply.
>>
>> Your solution is not exactly what I was looking for. I would like to know
>> how I can change the colors of the stacked bars in my plot and not use the
>> default values. How can this be done?
>>
>> Kind regards
>>
>> Georg
>>
>>
>>
>>
>> Von:    "Richard M. Heiberger" <[hidden email]>
>> An:     [hidden email],
>> Kopie:  r-help <[hidden email]>
>> Datum:  28.03.2017 17:40
>> Betreff:        Re: [R] Way to Plot Multiple Variables and Change Color
>>
>>
>>
>> I think you are looking for the likert function in the HH package.
>>> From ?likert
>>
>>
>> Diverging stacked barcharts for Likert, semantic differential, rating
>> scale data, and population pyramids.
>>
>>
>> This will get you started.  Much more fine control is available.  See
>> the examples and demo.
>>
>> ## install.packages("HH") ## if not yet on your system.
>>
>> library(HH)
>>
>> AA <- dfr[,-9]
>>
>> labels <- sort(unique(as.vector(data.matrix(AA))))
>> result.template <- integer(length(labels))
>> names(result.template) <- labels
>>
>> BB <- apply(AA, 2, function(x, result=result.template) {
>> tx <- table(x)
>> result[names(tx)] <- tx
>> result
>> }
>> )
>>
>> BB
>>
>> likert(t(BB), ReferenceZero=0, horizontal=FALSE)
>>
>>
>> On Tue, Mar 28, 2017 at 6:05 AM,  <[hidden email]> wrote:
>>> Hi All,
>>>
>>> in my current project I have to plot a whole bunch of related variables
>>> (item batteries, e.g. How do you rate ... a) Accelaration, b) Horse
>> Power,
>>> c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.
>>>
>>> I need to present the results as stacked bar charts where the variables
>>> are columns and the percentages of the scales values (1 .. 4) are the
>>> chunks of the stacked bar for each variable. To do this I have
>> transformed
>>> my data from wide to long and calculated the percentage for each
>> variable
>>> and value. The code for this is as follows:
>>>
>>> -- cut --
>>>
>>> dfr <- structure(
>>> list(
>>>   v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
>>>              4, 4, 4, 1, 1, 3, 3, 4),
>>>   v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
>>>              4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
>>>   v07_03 = c(3, 2, 2, 1, 4, 1,
>>>              2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
>>>   v07_04 = c(3, 1, 1,
>>>              4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
>>>   v07_05 = c(1,
>>>              2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
>>>   v07_06 = c(1,
>>>              2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
>>>   v07_07 = c(3,
>>>              2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
>>>   v07_08 = c(3,
>>>              2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
>>>   cased_id = structure(
>>>     1:20,
>>>     .Label = c(
>>>       "1",
>>>       "2",
>>>       "3",
>>>       "4",
>>>       "5",
>>>       "6",
>>>       "7",
>>>       "8",
>>>       "9",
>>>       "10",
>>>       "11",
>>>       "12",
>>>       "13",
>>>       "14",
>>>       "15",
>>>       "16",
>>>       "17",
>>>       "18",
>>>       "19",
>>>       "20"
>>>     ),
>>>     class = "factor"
>>>   )
>>> ),
>>> .Names = c(
>>>   "v07_01",
>>>   "v07_02",
>>>   "v07_03",
>>>   "v07_04",
>>>   "v07_05",
>>>   "v07_06",
>>>   "v07_07",
>>>   "v07_08",
>>>   "cased_id"
>>> ),
>>> row.names = c(NA, -20L),
>>> class = c("tbl_df", "tbl",
>>>           "data.frame")
>>> )
>>>
>>> mdf <- melt(df)
>>> d_result <- mdf  %>%
>>> dplyr::group_by(variable) %>%
>>> count(value)
>>>
>>> ggplot(
>>> d_result,
>>> aes(variable, y = n, fill = value)) +
>>> geom_bar(stat = "identity") +
>>> coord_cartesian(ylim = c(0,100))
>>>
>>> -- cut --
>>>
>>> Is there an easier way of doing this, i. e. a way without need to
>>> transform the data?
>>>
>>> How can I change the colors for the data points 1 .. 4?
>>>
>>> I tried
>>>
>>> -- cut --
>>>
>>> d_result,
>>> aes(variable, y = n, fill = value)) +
>>> geom_bar(stat = "identity") +
>>> coord_cartesian(ylim = c(0,100)) +
>>> scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>>>
>>> -- cut -
>>>
>>> but this does not work cause I am mixing continuous and descrete values.
>>>
>>> How can I change the colors for the bars?
>>>
>>> Kind regards
>>>
>>> Georg
>>>
>>> ______________________________________________
>>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>
>> ______________________________________________
>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>> ______________________________________________
>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
> David Winsemius
> Alameda, CA, USA
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
David Winsemius
Alameda, CA, USA


______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Rplots.pdf (7K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Antwort: Re: Antwort: Re: Antwort: Re: Way to Plot Multiple Variables and Change Color (SOLVED)

G.Maubach
Hi David,

many thanks for your answer.

I followed your suggesting and came up with the following code:

-- cut --

ggplot(
  d_result,
  aes(x = variable, y = n, fill = value)) +
  geom_bar(
    stat = "identity") +
  coord_cartesian(ylim = c(0,100)) +
  coord_flip() +
  scale_y_continuous(name = "Percent") +
  scale_fill_manual(
    values = rev(
      c(
        "forestgreen", "limegreen",
        "gold", "orange1",
        "tomato3", "darkred"))) +
  ggtitle(
    paste(
      "Question 8: Some Text")) +
  labs(fill = "Rating") +
  scale_x_discrete(
    name = element_blank(),
    drop = FALSE) +  # keep factor levels if no value exists
  geom_text(
    aes(label = n),
    color = "white",
    position = position_stack(vjust = 0.5)) +
  theme_minimal() +
  theme(
    legend.position = "right") +
  guides(fill = guide_legend(reverse = TRUE))

-- cut --

In addition to your suggestion I changed "fill = rev(factor(value))" to
"fill = value" and I added

guides(fill = guide_legend(reverse = TRUE))

to get the legend in the order from 1 .. 6 instead of 6 .. 1.

In my data I added the counts (n) before the mean value in the labels of
the left hand side. Now it looks to me as a version conforming to the
ESOMAR and BVM standards.

Many thanks again for your help.

Kind regards

Georg




Von:    David Winsemius <[hidden email]>
An:     [hidden email],
Kopie:  [hidden email]
Datum:  10.04.2017 22:21
Betreff:        Re: [R] Antwort: Re: Antwort: Re: Way to Plot Multiple
Variables and Change Color




> On Apr 10, 2017, at 1:06 PM, David Winsemius <[hidden email]>
wrote:
>
>
>> On Apr 10, 2017, at 7:45 AM, [hidden email] wrote:
>>
>> Hi Ulrik,
>>
>> many thanks for your reply. I had to take an unplanned break and was
not
>> in the office during the last two weeks. Thus my late reply.
>>
>> I followed your advice and converted the variable in argument "fill" to

>> factor. Now the color change works:
>>
>> -- cut --
>>
>> d_result <- structure(list("variable" = c("Item 1 (ø = 3.3) ", "Item 1
(ø = 3.3) ",
>>                                       "Item 1 (ø = 3.3) ", "Item 1 (ø =
3.3) ", "Item 1 (ø = 3.3) ",
>>                                       "Item 1 (ø = 3.3) ", "Item 2 (ø =
3.8) ", "Item 2 (ø = 3.8) ",
>>                                       "Item 2 (ø = 3.8) ", "Item 2 (ø =
3.8) ", "Item 2 (ø = 3.8) ",
>>                                       "Item 2 (ø = 3.8) ", "Item 3 (ø =
3.4) ", "Item 3 (ø = 3.4) ",
>>                                       "Item 3 (ø = 3.4) ", "Item 3 (ø =
3.4) ", "Item 3 (ø = 3.4) ",
>>                                       "Item 3 (ø = 3.4) ", "Item 4 (ø =
3.4) ", "Item 4 (ø = 3.4) ",
>>                                       "Item 4 (ø = 3.4) ", "Item 4 (ø =
3.4) ", "Item 4 (ø = 3.4) ",
>>                                       "Item 4 (ø = 3.4) ", "Item 5 (ø =
3.5) ", "Item 5 (ø = 3.5) ",
>>                                       "Item 5 (ø = 3.5) ", "Item 5 (ø =
3.5) ", "Item 5 (ø = 3.5) ",
>>                                       "Item 5 (ø = 3.5) ", "Item 6 (ø =
3.5) ", "Item 6 (ø = 3.5) ",
>>                                       "Item 6 (ø = 3.5) ", "Item 6 (ø =
3.5) ", "Item 6 (ø = 3.5) ",
>>                                       "Item 6 (ø = 3.5) ", "Item 7 (ø =
3.4) ", "Item 7 (ø = 3.4) ",
>>                                       "Item 7 (ø = 3.4) ", "Item 7 (ø =
3.4) ", "Item 7 (ø = 3.4) ",
>>                                       "Item 7 (ø = 3.4) ", "Item 8 (ø =
3.3) ", "Item 8 (ø = 3.3) ",
>>                                       "Item 8 (ø = 3.3) ", "Item 8 (ø =
3.3) ", "Item 8 (ø = 3.3) ",
>>                                       "Item 8 (ø = 3.3) "), value =
>> structure(c(1L, 2L, 3L, 4L, 5L,
>>       6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L,
>>       4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L,
>>       2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L), .Label = c("1 = very

>> satisfied",
>>                                                               "2", "3",

>> "4", "5", "6 = very dissatified"), class = "factor"),
>>                          n = c(14L, 20L, 24L, 14L, 16L, 14L, 9L, 15L,
>> 21L, 20L, 14L,
>>                                23L, 19L, 17L, 16L, 14L, 16L, 20L, 22L,
>> 17L, 15L, 16L, 20L,
>>                                12L, 19L, 15L, 16L, 15L, 18L, 19L, 18L,
>> 15L, 18L, 18L, 16L,
>>                                17L, 17L, 20L, 17L, 17L, 14L, 16L, 16L,
>> 25L, 16L, 17L, 8L,
>>                                20L)), .Names = c("variable", "value",
>> "n"), row.names =
>>                       c(NA,
>>                         -48L), vars = list("variable"), drop = TRUE,
>> indices =
>>                       list(0:5,
>>                            6:11, 12:17, 18:23, 24:29, 30:35, 36:41,
>> 42:47),
>>                     group_sizes = c(6L,
>>                                     6L, 6L, 6L, 6L, 6L, 6L, 6L),
>>                     biggest_group_size = 6L,
>>                     labels = structure(list(
>>                       "variable" = structure(1:8, .Label = c("Item 1 (ø

>> = 3.3) ",
>>                                                            "Item 2 (ø =

>> 3.8) ", "Item 3 (ø = 3.4) ", "Item 4 (ø = 3.4) ",
>>                                                            "Item 5 (ø =

>> 3.5) ", "Item 6 (ø = 3.5) ", "Item 7 (ø = 3.4) ",
>>                                                            "Item 8 (ø =

>> 3.3) "), class = "factor")),
>>                       row.names = c(NA,
>>                                     -8L), class = "data.frame", vars =
>> list("variable"),
>>                       drop = TRUE, .Names = "variable"),
>>                     class = c("grouped_df",
>>                               "tbl_df", "tbl", "data.frame"))
>>
>> ggplot(
>> d_result,
>> aes(x = variable, y = n, fill = rev(factor(value)))) +
>> geom_bar(
>>   stat = "identity") +
>> coord_cartesian(ylim = c(0,100)) +
>> coord_flip() +
>> scale_y_continuous(name = "Percent") +
>> scale_fill_manual(
>>   values = rev(
>>     c(
>>       "forestgreen", "limegreen",
>>       "gold", "orange1",
>>       "tomato3", "darkred"))) +
>> ggtitle(
>>   paste(
>>     "Question 8: Satisfaction?")) +
>> labs(fill = "Rating") +
>> scale_x_discrete(
>>   name = element_blank()) +
>> # scale_color_manual(
>> #   values = rev(
>> #     c(
>> #       "forestgreen", "limegreen",
>> #       "gold", "orange1",
>> #       "tomato3", "darkred"))) +
>> geom_text(
>>   aes(label = n),
>>   color = "white",
>>   position = position_stack(vjust = 0.5)) +
>> theme_minimal() +
>> theme(
>>   legend.position = "right")
>>
>> -- cut --
>>
>> I tried to change the order of the items on the y-axis,  e.g. Item 8
>> should be last and Item 1 first.
>
> "First" and "last" apparently mean "top" and "bottom" to you. Since the
$variable column is character, and ordering is typically done by setting
levels of factors, try:
>
> d_result$variable <- factor(d_result$variable,
levels=rev(unique(d_result$variable)))
>
>
> # changes ordering so the "Item 1"'s are at the top.
>
>
>> I tried to reverse the order of the items
>> within ggplot using rev() and relevel(). But neither of them worked. Is

>> there a way to do it?
>
> I don't think you can relevel a character column.
>>
>> I also tried to adjust the color palette for the legend, e.g. 1 = very
>> satisfied is green, 6 = very dissatified is red instead of vice versa
as
>> it is now. The result should ensure the item naming for 1 = satisfied
and
>> 6 = unsatifies cause this is the way it was asked in the questionnaire.
>>
>> Thus my question is:
>>
>> 1. How can I change the order of the sequence for the y-axis?
>>
>> 2. How can I adjust the color palette of the legend that it matches the

>> correct items?
>
> You probably could use relevel sinc `value` was a factor but I found it
easier to simply repeat the relevelling code and change the target column
name:
>
> d_result$value <- factor(d_result$value,
levels=rev(unique(d_result$value)))
>
> I did find the appearance of the final result stange because there was
irregular use of "\n" in the "variable" character values. that created
more items than I think you wanted to appear.

I edited the code above to take out the inadvertent linefeeds (which got
inserted by some part of the mail-processing chain) and then ran the
ggplot call inside pdf() and print(...):
[Anhang "Rplots.pdf" gelöscht von Georg Maubach/WWBO/WW/HAW]


HTH;
David.


>>
>> Can you give me a hint which functions I could use to do it?
>>
>> Kind regards
>>
>> Georg
>>
>>
>>
>>
>> Von:    Ulrik Stervbo <[hidden email]>
>> An:     [hidden email], "Richard M. Heiberger" <[hidden email]>,

>> Kopie:  r-help <[hidden email]>
>> Datum:  28.03.2017 18:32
>> Betreff:        Re: [R] Antwort: Re: Way to Plot Multiple Variables and

>> Change Color
>>
>>
>>
>> Hi Georg,
>>
>> you were on the right path - it is all about scale_fill*
>>
>> The 'problem' as you've discovered is that value is continuous, but
>> applying scale_fill_manual or others (except scale_fill_gradient)
expects

>> discrete values.
>>
>> The solution is simply to set the fill with that by using factor():
>>
>> ggplot(
>> d_result,
>> aes(variable, y = n, fill = factor(value))) +
>> geom_bar(stat = "identity") +
>> scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>> or:
>> ggplot(
>> d_result,
>> aes(variable, y = n, fill = factor(value))) +
>> geom_bar(stat = "identity") +
>> scale_fill_manual(values = c("red","blue", "green", "purple"))
>>
>> When using colorBrewer (which I highly recommend), I use scale_*_brewer

>> rather than setting the colour manually:
>>
>> ggplot(
>> d_result,
>> aes(variable, y = n, fill = factor(value))) +
>> geom_bar(stat = "identity") +
>> scale_fill_brewer(palette = "Blues ")
>>
>> Best,
>> Ulrik
>>
>>
>> On Tue, 28 Mar 2017 at 18:21 <[hidden email]> wrote:
>> Hi Richard,
>>
>> many thanks for your reply.
>>
>> Your solution is not exactly what I was looking for. I would like to
know
>> how I can change the colors of the stacked bars in my plot and not use
the

>> default values. How can this be done?
>>
>> Kind regards
>>
>> Georg
>>
>>
>>
>>
>> Von:    "Richard M. Heiberger" <[hidden email]>
>> An:     [hidden email],
>> Kopie:  r-help <[hidden email]>
>> Datum:  28.03.2017 17:40
>> Betreff:        Re: [R] Way to Plot Multiple Variables and Change Color
>>
>>
>>
>> I think you are looking for the likert function in the HH package.
>>> From ?likert
>>
>>
>> Diverging stacked barcharts for Likert, semantic differential, rating
>> scale data, and population pyramids.
>>
>>
>> This will get you started.  Much more fine control is available.  See
>> the examples and demo.
>>
>> ## install.packages("HH") ## if not yet on your system.
>>
>> library(HH)
>>
>> AA <- dfr[,-9]
>>
>> labels <- sort(unique(as.vector(data.matrix(AA))))
>> result.template <- integer(length(labels))
>> names(result.template) <- labels
>>
>> BB <- apply(AA, 2, function(x, result=result.template) {
>> tx <- table(x)
>> result[names(tx)] <- tx
>> result
>> }
>> )
>>
>> BB
>>
>> likert(t(BB), ReferenceZero=0, horizontal=FALSE)
>>
>>
>> On Tue, Mar 28, 2017 at 6:05 AM,  <[hidden email]> wrote:
>>> Hi All,
>>>
>>> in my current project I have to plot a whole bunch of related
variables
>>> (item batteries, e.g. How do you rate ... a) Accelaration, b) Horse
>> Power,
>>> c) Color Palette, etc.) which are all rated on a scale from 1 .. 4.
>>>
>>> I need to present the results as stacked bar charts where the
variables

>>> are columns and the percentages of the scales values (1 .. 4) are the
>>> chunks of the stacked bar for each variable. To do this I have
>> transformed
>>> my data from wide to long and calculated the percentage for each
>> variable
>>> and value. The code for this is as follows:
>>>
>>> -- cut --
>>>
>>> dfr <- structure(
>>> list(
>>>   v07_01 = c(3, 1, 1, 4, 3, 4, 4, 1, 3, 2, 2, 3,
>>>              4, 4, 4, 1, 1, 3, 3, 4),
>>>   v07_02 = c(1, 2, 1, 1, 2, 1, 4, 1, 1,
>>>              4, 4, 1, 4, 4, 1, 3, 2, 3, 3, 1),
>>>   v07_03 = c(3, 2, 2, 1, 4, 1,
>>>              2, 3, 3, 1, 4, 2, 3, 1, 4, 1, 4, 2, 2, 3),
>>>   v07_04 = c(3, 1, 1,
>>>              4, 2, 4, 4, 2, 2, 2, 4, 1, 2, 1, 3, 1, 2, 4, 1, 4),
>>>   v07_05 = c(1,
>>>              2, 2, 2, 4, 4, 1, 1, 4, 4, 2, 1, 2, 1, 4, 1, 2, 4, 1, 4),
>>>   v07_06 = c(1,
>>>              2, 1, 2, 1, 1, 3, 4, 3, 2, 2, 3, 3, 2, 4, 2, 3, 1, 4, 3),
>>>   v07_07 = c(3,
>>>              2, 3, 3, 1, 1, 3, 3, 4, 4, 1, 3, 1, 3, 2, 4, 1, 2, 3, 4),
>>>   v07_08 = c(3,
>>>              2, 1, 2, 2, 2, 3, 3, 4, 4, 1, 1, 1, 2, 3, 1, 4, 2, 2, 4),
>>>   cased_id = structure(
>>>     1:20,
>>>     .Label = c(
>>>       "1",
>>>       "2",
>>>       "3",
>>>       "4",
>>>       "5",
>>>       "6",
>>>       "7",
>>>       "8",
>>>       "9",
>>>       "10",
>>>       "11",
>>>       "12",
>>>       "13",
>>>       "14",
>>>       "15",
>>>       "16",
>>>       "17",
>>>       "18",
>>>       "19",
>>>       "20"
>>>     ),
>>>     class = "factor"
>>>   )
>>> ),
>>> .Names = c(
>>>   "v07_01",
>>>   "v07_02",
>>>   "v07_03",
>>>   "v07_04",
>>>   "v07_05",
>>>   "v07_06",
>>>   "v07_07",
>>>   "v07_08",
>>>   "cased_id"
>>> ),
>>> row.names = c(NA, -20L),
>>> class = c("tbl_df", "tbl",
>>>           "data.frame")
>>> )
>>>
>>> mdf <- melt(df)
>>> d_result <- mdf  %>%
>>> dplyr::group_by(variable) %>%
>>> count(value)
>>>
>>> ggplot(
>>> d_result,
>>> aes(variable, y = n, fill = value)) +
>>> geom_bar(stat = "identity") +
>>> coord_cartesian(ylim = c(0,100))
>>>
>>> -- cut --
>>>
>>> Is there an easier way of doing this, i. e. a way without need to
>>> transform the data?
>>>
>>> How can I change the colors for the data points 1 .. 4?
>>>
>>> I tried
>>>
>>> -- cut --
>>>
>>> d_result,
>>> aes(variable, y = n, fill = value)) +
>>> geom_bar(stat = "identity") +
>>> coord_cartesian(ylim = c(0,100)) +
>>> scale_fill_manual(values = RColorBrewer::brewer.pal(4, "Blues"))
>>>
>>> -- cut -
>>>
>>> but this does not work cause I am mixing continuous and descrete
values.

>>>
>>> How can I change the colors for the bars?
>>>
>>> Kind regards
>>>
>>> Georg
>>>
>>> ______________________________________________
>>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>>> and provide commented, minimal, self-contained, reproducible code.
>>
>> ______________________________________________
>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>> ______________________________________________
>> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>
> David Winsemius
> Alameda, CA, USA
>
> ______________________________________________
> [hidden email] mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius
Alameda, CA, USA

______________________________________________
[hidden email] mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.