[R] Antwort: Re: Way to Plot Multiple Variables and Change Color

Ulrik Stervbo ulrik.stervbo at gmail.com
Tue Mar 28 18:33:22 CEST 2017


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 <G.Maubach at weinwolf.de> 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" <rmh at temple.edu>
> An:     G.Maubach at weinwolf.de,
> Kopie:  r-help <r-help at r-project.org>
> 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,  <G.Maubach at weinwolf.de> 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
> >
> > ______________________________________________
> > R-help at r-project.org 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.
>
> ______________________________________________
> R-help at r-project.org 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]]



More information about the R-help mailing list