Skip to content

Instantly share code, notes, and snippets.

@ArsenyMalkov
Created September 5, 2018 06:13
Show Gist options
  • Save ArsenyMalkov/9699bb46d1d6e999366196b6d6b11a31 to your computer and use it in GitHub Desktop.
Save ArsenyMalkov/9699bb46d1d6e999366196b6d6b11a31 to your computer and use it in GitHub Desktop.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chart_common);
AnyChartView anyChartView = findViewById(R.id.any_chart_view);
Cartesian cartesian = AnyChart.column();
List<DataEntry> data = new ArrayList<>();
data.add(new CustomDataEntry("Accelerate", "Onsite", 18, "NaN", "NaN"));
data.add(new CustomDataEntry("CIS Renew", "Offshore", 6, "NaN", 2));
data.add(new CustomDataEntry("CIS Renew", "Onsite", 7, 1, 4));
data.add(new CustomDataEntry("CIS Others", "Offshore", "NaN", "NaN", 1));
data.add(new CustomDataEntry("CIS Others", "Onsite", 2, 1, 1));
preprocessData(data);
Set set = Set.instantiate();
set.data(data);
cartesian.labels("{position:'center', fontColor:'#000'}");
cartesian.column(set.mapAs("{'value': 'value2'}"));
cartesian.column(set.mapAs("{'value': 'value3'}"));
cartesian.column(set.mapAs("{'value': 'value4'}"));
cartesian.yScale().stackMode("value");
Ordinal ordinal = (Ordinal) cartesian.xScale(Ordinal.class);
ordinal.names("subcategory");
List<Double> weights = new ArrayList<>();
double padding = 0.1d;
List<String> names = new ArrayList<>();
for (DataEntry dataEntry : data) {
names.add((String) dataEntry.getValue("category"));
weights.add((dataEntry.getValue("subcategory") == null) ? padding : 1 );
}
List<String> ticks = new ArrayList<>();
ticks.add("1");
for (int i = 1; i < names.size(); i++) {
if (!names.get(i - 1).equals(names.get(i))) {
ticks.add(String.valueOf(i));
}
}
List<String> values = new ArrayList<>();
for (int i = 0; i < names.size(); i++) {
values.add(String.valueOf(i));
}
Ordinal customScale = Ordinal.instantiate();
customScale.values(values.toArray(new String[values.size()]), "");
customScale.names(names.toArray(new String[names.size()]));
customScale.weights(weights.toArray(new Double[weights.size()]));
((Ordinal) cartesian.xScale(Ordinal.class)).weights(weights.toArray(new Double[weights.size()]));
customScale.ticks(ticks.toArray(new String[ticks.size()]));
cartesian.xAxis(0).ticks(false);
cartesian.xAxis(1)
.scale(customScale)
.stroke("none")
.ticks(false);
Linear additionalXaxis = cartesian.xAxis(2);
additionalXaxis.scale(customScale);
additionalXaxis.labels(false);
additionalXaxis.stroke("none");
additionalXaxis.ticks()
.length(-46)
.position("outside");
anyChartView.setChart(cartesian);
}
private void preprocessData(List<DataEntry> data) {
data.add(0, new CustomDataEntry((String) data.get(0).getValue("category")));
data.add(new CustomDataEntry((String) data.get(data.size()-1).getValue("category")));
for (int i = 2; i < data.size() - 2; i++) {
String previous = (String) data.get(i-1).getValue("category");
String current = (String) data.get(i).getValue("category");
if (!current.equals(previous)) {
data.add(i, new CustomDataEntry(previous));
data.add(i+1, new CustomDataEntry(current));
i += 2;
}
}
}
class CustomDataEntry extends DataEntry {
public CustomDataEntry(String category) {
setValue("category", category);
}
public CustomDataEntry(String category, String subCategory, Integer value2, Integer value3, Integer value4) {
setValue("category", category);
setValue("subcategory", subCategory);
setValue("value2", value2);
setValue("value3", value3);
setValue("value4", value4);
}
public CustomDataEntry(String category, String subCategory, String value2, Integer value3, Integer value4) {
setValue("category", category);
setValue("subcategory", subCategory);
setValue("value2", value2);
setValue("value3", value3);
setValue("value4", value4);
}
public CustomDataEntry(String category, String subCategory, String value2, String value3, Integer value4) {
setValue("category", category);
setValue("subcategory", subCategory);
setValue("value2", value2);
setValue("value3", value3);
setValue("value4", value4);
}
public CustomDataEntry(String category, String subCategory, String value2, Integer value3, String value4) {
setValue("category", category);
setValue("subcategory", subCategory);
setValue("value2", value2);
setValue("value3", value3);
setValue("value4", value4);
}
public CustomDataEntry(String category, String subCategory, Integer value2, String value3, Integer value4) {
setValue("category", category);
setValue("subcategory", subCategory);
setValue("value2", value2);
setValue("value3", value3);
setValue("value4", value4);
}
public CustomDataEntry(String category, String subCategory, Integer value2, String value3, String value4) {
setValue("category", category);
setValue("subcategory", subCategory);
setValue("value2", value2);
setValue("value3", value3);
setValue("value4", value4);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment