Color bars in plotly

Hi everyone,

I made a bar plot with Plotly which I'd like to give each bar a unique color automatically like when we set fill = col_name in ggplot. Now with plotly I have tried setting the marker = list(color = ~col_name) , but it gave all bars the same color.
Any ideas how could I overcome this issue

Thanks :slightly_smiling_face: :slightly_smiling_face:

Please note the color parameter:

library(plotly)

DF <- data.frame(Animals = c("giraffes", "orangutans", "monkeys"), SF_Zoo = c(20, 14, 23))

fig <- plot_ly(DF, x = ~Animals, y = ~SF_Zoo, color = ~Animals, type = 'bar')
fig <- fig %>% layout(yaxis = list(title = 'Count'))

fig

image

Mapping custom colors:

library(plotly)

DF <- data.frame(Animals = c("giraffes", "orangutans", "monkeys"), SF_Zoo = c(20, 14, 23))

fig <- plot_ly(DF, x = ~Animals, y = ~SF_Zoo, color = ~Animals, colors = c("red", "green", "blue"), type = 'bar')
fig <- fig %>% layout(yaxis = list(title = 'Count'))

fig

image

1 Like

Thanks @ismirsehregal for your help. Unfortunately when I do so the plot won't appear in the output. Thus I have to set the color using the marker list.

It's hard to tell what's going wrong without seeing your code.

1 Like

Sure here it's

restaurants_per_area <- air_store_info %>%
    group_by(air_area_name) %>%
    count() %>%
    arrange(-n)
restaurants_per_area %>%
    plot_ly(
        x = ~air_area_name, 
        y = ~n, type = 'bar', 
        marker = list(color = ~air_area_name, colorscale = list(c(1, 65), c("lawngreen", "red"))), 
        height = 1000) %>%
    layout(
        title = list(
            text = 'The number of restaurants at each location', 
            font = list(color = 'steelblue', size = 25),
            y = 0.97
        ),
        xaxis = list(title = "Air Area Name", categoryorder = 'total ascending', color = 'green'),
        yaxis = list(title = 'Number of Restaurants', color = 'green')
    )

Can you please add the output of dput(restaurants_per_area)?

structure(list(air_area_name = c("Fukuoka-ken Fukuoka-shi Daimyō", 
"Tōkyō-to Shibuya-ku Shibuya", "Tōkyō-to Minato-ku Shibakōen", 
"Tōkyō-to Shinjuku-ku Kabukichō", "Tōkyō-to Setagaya-ku Setagaya", 
"Tōkyō-to Chūō-ku Tsukiji", "Ōsaka-fu Ōsaka-shi Ōgimachi", 
"Hiroshima-ken Hiroshima-shi Kokutaijimachi", "Tōkyō-to Meguro-ku Kamimeguro", 
"Hokkaidō Sapporo-shi Minami 3 Jōnishi", "Tōkyō-to Suginami-ku Asagayaminami", 
"Tōkyō-to Chiyoda-ku Kudanminami", "Ōsaka-fu Ōsaka-shi Kyūtarōmachi", 
"Hyōgo-ken Kōbe-shi Kumoidōri", "Miyagi-ken Sendai-shi Kamisugi", 
"Fukuoka-ken Fukuoka-shi Hakata Ekimae", "Tōkyō-to Taitō-ku Higashiueno", 
"Tōkyō-to Chūō-ku Ginza", "Hokkaidō Asahikawa-shi 6 Jōdōri", 
"Shizuoka-ken Hamamatsu-shi Motoshirochō", "Tōkyō-to Toshima-ku Minamiikebukuro", 
"Hyōgo-ken Kakogawa-shi Kakogawachō Kitazaike", "Ōsaka-fu Ōsaka-shi Shinmachi", 
"Hyōgo-ken Himeji-shi Yasuda", "Tōkyō-to Kōtō-ku Tōyō", 
"Tōkyō-to Minato-ku Akasaka", "Fukuoka-ken Fukuoka-shi Shiobaru", 
"Fukuoka-ken Itoshima-shi Maebarunishi", "Hiroshima-ken Fukuyama-shi Higashisakuramachi", 
"Hyōgo-ken Nishinomiya-shi Rokutanjichō", "Niigata-ken Niigata-shi Gakkōchōdōri 1 Banchō", 
"Fukuoka-ken Fukuoka-shi Momochi", "Fukuoka-ken Kurume-shi Jōnanmachi", 
"Hyōgo-ken Kōbe-shi Sumiyoshi Higashimachi", "Tōkyō-to Itabashi-ku Itabashi", 
"Tōkyō-to Nakano-ku Nakano", "Tōkyō-to Tachikawa-shi Izumichō", 
"Tōkyō-to Bunkyō-ku Kasuga", "Tōkyō-to Setagaya-ku Okusawa", 
"Tōkyō-to Shinagawa-ku Hiromachi", "Tōkyō-to Toshima-ku Higashiikebukuro", 
"Fukuoka-ken Fukuoka-shi Torikai", "Fukuoka-ken Kitakyūshū-shi Ōtemachi", 
"Hokkaidō Sapporo-shi Kotoni 2 Jō", "Hyōgo-ken Takarazuka-shi Tōyōchō", 
"Ōsaka-fu Ōsaka-shi Ōhiraki", "Tōkyō-to Adachi-ku Chūōhonchō", 
"Tōkyō-to Edogawa-ku Chūō", "Tōkyō-to Machida-shi Morino", 
"Tōkyō-to Nerima-ku Toyotamakita", "Tōkyō-to Ōta-ku Kamiikedai", 
"Tōkyō-to Shinjuku-ku Nishishinjuku", "Tōkyō-to Taitō-ku Asakusa", 
"Fukuoka-ken Kitakyūshū-shi None", "Niigata-ken Niigata-shi Teraohigashi", 
"Shizuoka-ken Shizuoka-shi Ōtemachi", "Tōkyō-to Ōta-ku Kamata", 
"Fukuoka-ken Fukuoka-shi Imaizumi", "Fukuoka-ken Fukuoka-shi Takatori", 
"Fukuoka-ken Fukuoka-shi Tenjin", "Fukuoka-ken Kitakyūshū-shi Konyamachi", 
"Fukuoka-ken Yame-shi Motomachi", "Hiroshima-ken Hiroshima-shi Nagarekawachō", 
"Hokkaidō Abashiri-shi Minami 6 Jōhigashi", "Hokkaidō Katō-gun Motomachi", 
"Hokkaidō Sapporo-shi Atsubetsuchūō 1 Jō", "Hokkaidō Sapporo-shi Kita 24 Jōnishi", 
"Hyōgo-ken Amagasaki-shi Higashinanamatsuchō", "Hyōgo-ken Kōbe-shi Motomachidōri", 
"Niigata-ken Kashiwazaki-shi Chūōchō", "Niigata-ken Nagaoka-shi Ōtedōri", 
"Ōsaka-fu Higashiōsaka-shi Aramotokita", "Ōsaka-fu Neyagawa-shi Honmachi", 
"Ōsaka-fu Ōsaka-shi Fuminosato", "Ōsaka-fu Ōsaka-shi Kyōmachibori", 
"Ōsaka-fu Ōsaka-shi Nakanochō", "Ōsaka-fu Ōsaka-shi Nanbasennichimae", 
"Ōsaka-fu Sakai-shi Minamikawaramachi", "Ōsaka-fu Suita-shi Izumichō", 
"Shizuoka-ken Numazu-shi Miyukichō", "Tōkyō-to Bunkyō-ku Sendagi", 
"Tōkyō-to Chiyoda-ku Kanda Jinbōchō", "Tōkyō-to Fuchū-shi Miyanishichō", 
"Tōkyō-to Katsushika-ku Tateishi", "Tōkyō-to Kita-ku Ōjihonchō", 
"Tōkyō-to Koganei-shi Honchō", "Tōkyō-to Kōtō-ku Kameido", 
"Tōkyō-to Kōtō-ku Tomioka", "Tōkyō-to Meguro-ku Jiyūgaoka", 
"Tōkyō-to Meguro-ku Takaban", "Tōkyō-to Minato-ku Roppongi", 
"Tōkyō-to Musashino-shi Kichijōji Honchō", "Tōkyō-to Musashino-shi Midorichō", 
"Tōkyō-to Setagaya-ku Kitazawa", "Tōkyō-to Setagaya-ku Sangenjaya", 
"Tōkyō-to Shibuya-ku Dōgenzaka", "Tōkyō-to Shibuya-ku Higashi", 
"Tōkyō-to Shibuya-ku Jingūmae", "Tōkyō-to Shinagawa-ku Higashigotanda", 
"Tōkyō-to Taitō-ku Kuramae", "Tōkyō-to Toshima-ku Mejiro", 
"Tōkyō-to Toshima-ku Nishiikebukuro", "Tōkyō-to Toshima-ku Sugamo"
), n = c(64L, 58L, 51L, 39L, 30L, 29L, 25L, 23L, 22L, 21L, 21L, 
20L, 19L, 17L, 17L, 16L, 16L, 14L, 13L, 13L, 12L, 10L, 10L, 9L, 
9L, 8L, 7L, 7L, 7L, 7L, 7L, 6L, 6L, 6L, 6L, 6L, 6L, 5L, 5L, 5L, 
5L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 3L, 
3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L)), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"), row.names = c(NA, -103L), groups = structure(list(
    air_area_name = c("Fukuoka-ken Fukuoka-shi Daimyō", "Fukuoka-ken Fukuoka-shi Hakata Ekimae", 
    "Fukuoka-ken Fukuoka-shi Imaizumi", "Fukuoka-ken Fukuoka-shi Momochi", 
    "Fukuoka-ken Fukuoka-shi Shiobaru", "Fukuoka-ken Fukuoka-shi Takatori", 
    "Fukuoka-ken Fukuoka-shi Tenjin", "Fukuoka-ken Fukuoka-shi Torikai", 
    "Fukuoka-ken Itoshima-shi Maebarunishi", "Fukuoka-ken Kitakyūshū-shi Konyamachi", 
    "Fukuoka-ken Kitakyūshū-shi None", "Fukuoka-ken Kitakyūshū-shi Ōtemachi", 
    "Fukuoka-ken Kurume-shi Jōnanmachi", "Fukuoka-ken Yame-shi Motomachi", 
    "Hiroshima-ken Fukuyama-shi Higashisakuramachi", "Hiroshima-ken Hiroshima-shi Kokutaijimachi", 
    "Hiroshima-ken Hiroshima-shi Nagarekawachō", "Hokkaidō Abashiri-shi Minami 6 Jōhigashi", 
    "Hokkaidō Asahikawa-shi 6 Jōdōri", "Hokkaidō Katō-gun Motomachi", 
    "Hokkaidō Sapporo-shi Atsubetsuchūō 1 Jō", "Hokkaidō Sapporo-shi Kita 24 Jōnishi", 
    "Hokkaidō Sapporo-shi Kotoni 2 Jō", "Hokkaidō Sapporo-shi Minami 3 Jōnishi", 
    "Hyōgo-ken Amagasaki-shi Higashinanamatsuchō", "Hyōgo-ken Himeji-shi Yasuda", 
    "Hyōgo-ken Kakogawa-shi Kakogawachō Kitazaike", "Hyōgo-ken Kōbe-shi Kumoidōri", 
    "Hyōgo-ken Kōbe-shi Motomachidōri", "Hyōgo-ken Kōbe-shi Sumiyoshi Higashimachi", 
    "Hyōgo-ken Nishinomiya-shi Rokutanjichō", "Hyōgo-ken Takarazuka-shi Tōyōchō", 
    "Miyagi-ken Sendai-shi Kamisugi", "Niigata-ken Kashiwazaki-shi Chūōchō", 
    "Niigata-ken Nagaoka-shi Ōtedōri", "Niigata-ken Niigata-shi Gakkōchōdōri 1 Banchō", 
    "Niigata-ken Niigata-shi Teraohigashi", "Ōsaka-fu Higashiōsaka-shi Aramotokita", 
    "Ōsaka-fu Neyagawa-shi Honmachi", "Ōsaka-fu Ōsaka-shi Fuminosato", 
    "Ōsaka-fu Ōsaka-shi Kyōmachibori", "Ōsaka-fu Ōsaka-shi Kyūtarōmachi", 
    "Ōsaka-fu Ōsaka-shi Nakanochō", "Ōsaka-fu Ōsaka-shi Nanbasennichimae", 
    "Ōsaka-fu Ōsaka-shi Ōgimachi", "Ōsaka-fu Ōsaka-shi Ōhiraki", 
    "Ōsaka-fu Ōsaka-shi Shinmachi", "Ōsaka-fu Sakai-shi Minamikawaramachi", 
    "Ōsaka-fu Suita-shi Izumichō", "Shizuoka-ken Hamamatsu-shi Motoshirochō", 
    "Shizuoka-ken Numazu-shi Miyukichō", "Shizuoka-ken Shizuoka-shi Ōtemachi", 
    "Tōkyō-to Adachi-ku Chūōhonchō", "Tōkyō-to Bunkyō-ku Kasuga", 
    "Tōkyō-to Bunkyō-ku Sendagi", "Tōkyō-to Chiyoda-ku Kanda Jinbōchō", 
    "Tōkyō-to Chiyoda-ku Kudanminami", "Tōkyō-to Chūō-ku Ginza", 
    "Tōkyō-to Chūō-ku Tsukiji", "Tōkyō-to Edogawa-ku Chūō", 
    "Tōkyō-to Fuchū-shi Miyanishichō", "Tōkyō-to Itabashi-ku Itabashi", 
    "Tōkyō-to Katsushika-ku Tateishi", "Tōkyō-to Kita-ku Ōjihonchō", 
    "Tōkyō-to Koganei-shi Honchō", "Tōkyō-to Kōtō-ku Kameido", 
    "Tōkyō-to Kōtō-ku Tomioka", "Tōkyō-to Kōtō-ku Tōyō", 
    "Tōkyō-to Machida-shi Morino", "Tōkyō-to Meguro-ku Jiyūgaoka", 
    "Tōkyō-to Meguro-ku Kamimeguro", "Tōkyō-to Meguro-ku Takaban", 
    "Tōkyō-to Minato-ku Akasaka", "Tōkyō-to Minato-ku Roppongi", 
    "Tōkyō-to Minato-ku Shibakōen", "Tōkyō-to Musashino-shi Kichijōji Honchō", 
    "Tōkyō-to Musashino-shi Midorichō", "Tōkyō-to Nakano-ku Nakano", 
    "Tōkyō-to Nerima-ku Toyotamakita", "Tōkyō-to Ōta-ku Kamata", 
    "Tōkyō-to Ōta-ku Kamiikedai", "Tōkyō-to Setagaya-ku Kitazawa", 
    "Tōkyō-to Setagaya-ku Okusawa", "Tōkyō-to Setagaya-ku Sangenjaya", 
    "Tōkyō-to Setagaya-ku Setagaya", "Tōkyō-to Shibuya-ku Dōgenzaka", 
    "Tōkyō-to Shibuya-ku Higashi", "Tōkyō-to Shibuya-ku Jingūmae", 
    "Tōkyō-to Shibuya-ku Shibuya", "Tōkyō-to Shinagawa-ku Higashigotanda", 
    "Tōkyō-to Shinagawa-ku Hiromachi", "Tōkyō-to Shinjuku-ku Kabukichō", 
    "Tōkyō-to Shinjuku-ku Nishishinjuku", "Tōkyō-to Suginami-ku Asagayaminami", 
    "Tōkyō-to Tachikawa-shi Izumichō", "Tōkyō-to Taitō-ku Asakusa", 
    "Tōkyō-to Taitō-ku Higashiueno", "Tōkyō-to Taitō-ku Kuramae", 
    "Tōkyō-to Toshima-ku Higashiikebukuro", "Tōkyō-to Toshima-ku Mejiro", 
    "Tōkyō-to Toshima-ku Minamiikebukuro", "Tōkyō-to Toshima-ku Nishiikebukuro", 
    "Tōkyō-to Toshima-ku Sugamo"), .rows = structure(list(1L, 
        16L, 58L, 32L, 27L, 59L, 60L, 42L, 28L, 61L, 54L, 43L, 
        33L, 62L, 29L, 8L, 63L, 64L, 19L, 65L, 66L, 67L, 44L, 
        10L, 68L, 24L, 22L, 14L, 69L, 34L, 30L, 45L, 15L, 70L, 
        71L, 31L, 55L, 72L, 73L, 74L, 75L, 13L, 76L, 77L, 7L, 
        46L, 23L, 78L, 79L, 20L, 80L, 56L, 47L, 38L, 81L, 82L, 
        12L, 18L, 6L, 48L, 83L, 35L, 84L, 85L, 86L, 87L, 88L, 
        25L, 49L, 89L, 9L, 90L, 26L, 91L, 3L, 92L, 93L, 36L, 
        50L, 57L, 51L, 94L, 39L, 95L, 5L, 96L, 97L, 98L, 2L, 
        99L, 40L, 4L, 52L, 11L, 37L, 53L, 17L, 100L, 41L, 101L, 
        21L, 102L, 103L), ptype = integer(0), class = c("vctrs_list_of", 
    "vctrs_vctr", "list"))), row.names = c(NA, -103L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE))

Not sure if this is what you are looking for?

library(plotly)

restaurants_per_area %>%
  plot_ly(
    x = ~air_area_name, 
    y = ~n, type = 'bar',
    color = ~n,
    colors = c("lawngreen", "red"),
    height = 1000) %>%
  layout(
    title = list(
      text = 'The number of restaurants at each location', 
      font = list(color = 'steelblue', size = 25),
      y = 0.97
    ),
    xaxis = list(title = "Air Area Name", categoryorder = 'total ascending', color = 'green'),
    yaxis = list(title = 'Number of Restaurants', color = 'green')
  )

Or categorical coloring:

library(plotly)

restaurants_per_area %>%
  plot_ly(
    x = ~air_area_name, 
    y = ~n, type = 'bar',
    color = ~air_area_name,
    height = 1000) %>%
  layout(
    title = list(
      text = 'The number of restaurants at each location', 
      font = list(color = 'steelblue', size = 25),
      y = 0.97
    ),
    xaxis = list(title = "Air Area Name", categoryorder = 'total ascending', color = 'green'),
    yaxis = list(title = 'Number of Restaurants', color = 'green')
  )

The categorical coloring didn't work for me but the count one worked fine.
Many thanks for your help @ismirsehregal

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.