Forum Discussion
Iceroom
8 years agoNew Member
Set y-axis 'max height' and 'min height' with R based bar graph visual
Hi guys. I'm trying to create a R based bar chart power Bi visual for practicing custom visual creation. I want to create an input field in the Format of Power Bi that defines the max and min heights...
Iceroom
8 years agoNew Member
Hi guys. I'm trying to create a R based bar chart power Bi visual for practicing custom visual creation. I want to create an input field in the Format of Power Bi that defines the max and min heights of the Y axis. I saw a lot of examples but I didn't get enough inspiration.
I have successfully created an input area in capabilities.json. I have set related parameters in setting.ts. I also set the x and y axes in the script.r file and made them a bar graph, but I can't achieve the maximum and minimum height of the y axis with my code. Can someone help?
"yAxis": {
"displayName": "Y-Axis",
"displayNameKey": "Visual_YAxis",
"properties": {
"show": {
"displayName": "Show",
"displayNameKey": "Visual_Show",
"type": {
"bool": true
}
},
"dynamicScaling": {
"displayName": "Scaled",
"displayNameKey": "Dynamic_Scaling",
"type": {
"bool": true
}
},
"yscalemaxin":{
"displayName": "Maximum Height",
"displayNameKey": "dynymax",
"type": {
"numeric": true
}
},
"yscaleminin":{
"displayName": "Minimum Height",
"displayNameKey": "dynymin",
"type": {
"numeric": true
}
}
}
}
source('./r_files/flatten_HTML.r')
############### Library Declarations ###############
libraryRequireInstall("ggplot2");
libraryRequireInstall("plotly");
libraryRequireInstall("htmlwidgets");
####################################################
################### Actual code ####################
dataFrame <- data.frame(Axis, Values[[1]]);
dynamicScaling = TRUE;
if(exists("yAxis_dynamicScaling")){
dynamicScaling = as.logical(yAxis_dynamicScaling);
}
if(dynamicScaling){
yscaleminin = 0
yscalemaxin = Inf
if(exists("yAxis_yscaleminin")){
yscaleminin = as.numeric(yAxis_yscaleminin)
yscalemininValue = yAxis_yscaleminin
yscalemininValue = round(max(min(yscalemininValue,1e+6),0))
}else{
yscalemininValue = 0; #if user does not enter a value then the y-axis start at 0
}
if(exists("yAxis_yscalemaxin")){
yscalemaxin = as.numeric(yAxis_yscalemaxin)
yscalemaxinValue = yAxis_yscalemaxin
yscalemaxinValue = round(max(min(yscalemaxinValue,10000),0))
}else{
yscalemaxinValue = Inf; #if user does not enter a value into y-axis end, the y-axis end at infinity
}
yscales <- c(-Inf, yscalemaxinValue, yscalemaxinValue, Inf)
scale <- c(yscalemaxinValue,yscalemaxinValue)[findInterval(dataFrame[[2]], vec=yscales)]
p <- plot_ly(Values,
x = dataFrame[[1]],
y = dataFrame[[2]],
type = "bar",
marker = list(yscales = scale)
);
}else{ #No dynamic scaling
p <- plot_ly(Values,
x = dataFrame[[1]],
y = dataFrame[[2]],
type = "bar",
);
}
####################################################
############# Create and save widget ###############
#p = ggplotly(p);
internalSaveWidget(p, 'out.html');
####################################################