1

我正在尝试通过 r studio 中的 highchart 构建柱形图。我已将值转换为 %,因为我希望图表显示 %,但我希望数据标签显示值,有没有办法做到这一点?

我的数据集有一列包含伦敦的值和伦敦的百分比,我希望图表的 Y 轴显示百分比,而数据标签显示值。

这是我当前的代码:

    hc <- highchart() %>%
  hc_title(text= "Gender - London")%>%
  hc_colors('#71599b') %>%
  hc_yAxis(max = 0.7) %>%
  hc_xAxis(categories = Sex$Gender) %>%
  hc_add_series(name = "London", type = "column",
                data = Sex$LON_PERC, dataLabels = list(enabled=TRUE, format={Sex$London}) ) 

因此,我将 Sex$LON_PERC (% in London) 作为要绘制的数据,而 Sex$London 是数据标签。

但是这段代码将伦敦的所有值放在每个数据标签中。

在此处输入图像描述

编辑:

这是我要绘制的数据,Y 轴上的 LON_PERC,X 轴上的性别和伦敦作为数据标签

Gender    London    LON_PERC
Declined    5      0.000351247
Female    8230     0.578152441
Male      4640     0.325957148
No Data   1360     0.095539164
4

2 回答 2

1

我对使用“highcharter”包感到相当不舒服,因为它需要商业许可证,而我没有。

您想要达到的结果可以通过以下 - 相当简单的 - 代码使用base rggplot功能来实现,这两者都是免费软件。我将在下面用两个代码片段展示这一点。

### your data
Sex <- read.table(header = TRUE, text = 
            "Gender     London     LON_PERC
             Declined       5      0.000351247
             Female      8230      0.578152441
             Male        4640      0.325957148
            'No Data'    1360      0.095539164
                  ")

使用基数 r 的解决方案

barplot函数返回一个向量(如果besides为假),其中包含绘制的所有条形中点的坐标(如果besides为真,它是一个矩阵)。这为我们提供了用于在条形上方设置文本的 X 坐标,我们在绘制的数据中已经拥有的条形高度,对。

# Draw the barplot and store result in `mp`
mp <- barplot(Sex$LON_PERC,     # height of the bar 
    names.arg = Sex$Gender,     # x-axis labels
    ylim = c(0, 0.7),           # limits of y-axis
    col = '#71599b',            # your color
    main = "Gender - London")   # main title

# add text to the barplot using the stored values
text(x = mp,                    # middle of the bars 
    y = Sex$LON_PERC,           # height of the bars
    labels = Sex$London,        # text to display
    adj = c(.5, -1.5))          # adjust horizontally and vertically

这会产生以下图:

在此处输入图像描述

基于ggplot的解决方案

library(ggplot2)

ggplot(aes(x = Gender, y =  LON_PERC), data = Sex) +
  geom_bar(stat = "identity", width = .60, fill = "#71599b" ) +    
  geom_text(aes(label = London), 
            position = position_dodge(width = .9), 
            vjust = -.3, size = 3, hjust =  "center") +
  theme_minimal() +
  scale_y_continuous(limits = c(0, 0.7), 
            breaks = seq(0.0, 0.7, by = 0.1), 
            minor_breaks = NULL) +
  labs(title = "Gender - London") + 
  theme(axis.title.y = element_blank(), axis.title.x = element_blank()) 

产生以下情节:

在此处输入图像描述

在这两种情况下,许多特征都可能适合您的需求/愿望。

我希望您从这些示例中受益,即使它不是使用 highcharter 制作的。

于 2017-12-08T09:40:14.890 回答
1

我找到了解决办法。

因此,我可以添加当我将鼠标悬停在列/栏上时出现的“工具提示”。

首先,需要一个函数:

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
}

然后在创建 highchart 时需要调用这个函数。

数据如下所示:

Sex <- read.table(header = TRUE, text = 
            "Gender     London     LON_PERC
             Declined       5      0.000351247
             Female      8230      0.578152441
             Male        4640      0.325957148
            'No Data'    1360      0.095539164
                  ")

那么生成highchart的代码是:

Gender<- highchart() %>%
      hc_xAxis(categories = Sex$Gender, labels=list(rotation=0))%>%
      myhc_add_series_labels_values(labels = Sex$Gender,values=Sex$LON_PERC, text=Sex$London, type="column")%>%
      hc_tooltip(crosshairs=TRUE, borderWidth=5, sort=TRUE, shared=TRUE, table=TRUE,pointFormat=paste('<br>%: {point.y}%<br>#: {point.text}'))%>%
      hc_legend()

这给出了以下输出:

在此处输入图像描述

然后,当我将鼠标悬停在每个列/条上时,它会给出百分比信息和数字信息,如下所示:

在此处输入图像描述

于 2017-12-21T14:42:25.170 回答