饼图高级绘图库R

7

我正在使用highcharter绘制饼图。当鼠标悬停在每个切片上时,它只显示一个值,但我想添加另一个值,以便它显示两个!以下是示例代码:在我的代码中,您可以看到它只使用A列和B列绘制数据,但我希望它在鼠标悬停在切片上时显示C列作为附加信息。

library(highcharter)
A <- c("a", "b", "c", "d")
B <- c(4, 6, 9, 2)
C <- c(23, 26, 13, 15)
df <- data.frame(A, B, C)

highchart() %>% 
  hc_chart(type = "pie") %>% 
  hc_add_series_labels_values(labels = df$A, values = df$B)%>%    

  hc_tooltip(crosshairs = TRUE, borderWidth = 5, sort = TRUE, shared = TRUE, table = TRUE,
             pointFormat = paste('<b>{point.percentage:.1f}%</b>')
  ) %>%

  hc_title(text = "ABC",
           margin = 20,
           style = list(color = "#144746", useHTML = TRUE)) 
2个回答

3
据我所知,@ewolden提出的解决方案在highcharter中不起作用。以下是为highcharter饼图设置附加信息的简单灵活解决方案:
library(highcharter)
A <- c("a", "b", "c", "d")
B <- c(4, 6, 9, 2)
C <- c(23, 26, 13, 15)
df <- data.frame(A, B, C)

# A modified version of the "hc_add_series_labels_values" function
# The "text" input is now available
myhc_add_series_labels_values <- function (hc, labels, values, text, colors = NULL, ...) 
{
    assertthat::assert_that(is.highchart(hc), is.numeric(values), 
        length(labels) == length(values))
    df <- dplyr::data_frame(name = labels, y = values, text=text)
    if (!is.null(colors)) {
        assert_that(length(labels) == length(colors))
        df <- mutate(df, color = colors)
    }
    ds <- list_parse(df)
    hc <- hc %>% hc_add_series(data = ds, ...)
    hc
}

# Set the "text" input in myhc_add_series_labels_values
# point.text is now available inside pointFormat of hc_tooltip
highchart() %>% 
  hc_chart(type = "pie", data=df) %>% 
  myhc_add_series_labels_values(labels=A, values=B, text=C) %>% 
  hc_tooltip(crosshairs=TRUE, borderWidth=5, sort=TRUE, shared=TRUE, table=TRUE,
     pointFormat=paste('<br><b>A: {point.percentage:.1f}%</b><br>C: {point.text}')) %>%
  hc_title(text="ABC", margin=20, style=list(color="#144746", useHTML=TRUE)) 

通过这个解决方案,我们可以在工具提示中打印两个或更多变量的内容。
下面我们将变量D添加到df数据集中,并在工具提示中可视化它:

enter image description here

D <- c("Mars", "Jupiter", "Venus", "Saturn")
df <- data.frame(A, B, C, D)
txt <- paste("C:",C," <br>D:", D)

highchart() %>% 
  hc_chart(type="pie", data=df) %>% 
  myhc_add_series_labels_values(labels=A, values=B, text=txt) %>% 
  hc_tooltip(crosshairs=TRUE, borderWidth=5, sort=TRUE, shared=TRUE, table=TRUE,
          pointFormat=paste('<br><b>A: {point.percentage:.1f}%</b><br>{point.text}')) %>%
  hc_title(text = "ABC", margin = 20, style = list(color = "#144746", useHTML = TRUE)) 

enter image description here


1
你可以在highcharts中使用自定义名称创建图表,方法如下:http://jsfiddle.net/zh65suhm/。也就是说,将你的工具提示更改为以下内容:
'<b>{point.percentage:.1f}%</b><br>Custom point: <b>{point.customData}</b>'

每个点都有自己的customData值。
我没有使用过highcharter,但是根据API看来可能可以进行一些工作。
hc_add_series(favorite_bars, "pie", hcaes(name = bar, y = percent), name = "Bars") %>%

潜在的可能性是这个可以工作:

hc_add_series(favorite_bars, "pie", hcaes(name = bar, y = percent, customData = variable_with_customdata), name = "My pie") %>%

希望这可以帮到你。

非常感谢!我还有一个问题:如何绘制带有不同颜色类别的条形图?请考虑我在示例代码中提到的数据集作为可重现的线。 - Mahdi Baghbanzadeh
同样地,您可以为每个点或系列设置颜色(也在我上面提供的fiddle中显示)。 - ewolden
在 R 中,与 fiddle 不同的是,只需要将“pie”更改为“bar”,但在 R 中无法正常工作。 hchart(df,“bar”,hcaes(A,B,color = C)) 该命令使我的条形图对于列 C 中的每个类别都具有丰富多彩的颜色,但我无法控制颜色。 提前感谢您。 - Mahdi Baghbanzadeh
问题已解决,谢谢:D - Mahdi Baghbanzadeh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接