2 Stimmen

Ist es möglich, die Position der Domänenachse in einem JFreeChart-Diagramm zu manipulieren?

Ich habe einen Datensatz, den ich als Paar von Histogrammen/Balkendiagrammen anzeigen möchte. Einen Datensatz möchte ich als "positiven" Satz von Werten darstellen, die nach oben steigen. Den zweiten Satz muss ich als "negativen" Satz darstellen, der absteigt. Sie teilen sich eine Bereichsachse.

Ich kann sie alle so zeichnen, wie ich möchte, indem ich einen CombinedDomainCategoryPlot verwende, aber für ein wichtiges Detail - die Achse erscheint unter dem zweiten Plot, während ich möchte, dass sie in der Mitte zwischen den beiden Plots erscheint.

Zur Info, diese Daten sind Sequenz-Tags, die gegen eine Genom-Sequenz abgebildet wurden. Einige werden auf dem "oberen" Strang des Genoms abgebildet und andere auf dem "unteren" oder "umgekehrten" Strang, daher soll die Visualisierung die Daten auf diese Weise darstellen. Ich hatte gehofft, einfach den Wertebereich des unteren Plots umzukehren und die Bereichsachse in der Mitte erscheinen zu lassen, aber anscheinend funktioniert es nicht auf diese Weise.

Meine Annahme ist, dass ich die CombinedDomainCategoryPlot-Klasse untergeordnet oder ersetzen muss, aber wenn jemand bereits einen Weg um dies herum gefunden hat oder weiß, wie man es innerhalb der aktuellen Grenzen des Codes richtig macht, wäre ich dankbar. Nochmals zur Info, ich arbeite mit Version 1.0.12 von JFreeChart (aufgrund von Abhängigkeitsproblemen mit der "aktuellen" Version 1.0.13). Leider scheinen auch die JFreeChart-Foren tot zu sein.

2voto

Jes Punkte 2728

Das Problem liegt darin, dass das CombinedDomainCategoryPlot die Domäne auf dem hinzugefügten Subplot zurücksetzt. Aus CombinedDomainCategoryPlot.java:

public void add(CategoryPlot subplot, int weight) {
  // [..] ausgelassener Code
  subplot.setDomainAxis(null);
  // [..] ausgelassener Code
}

Die Lösung besteht einfach darin, die Domänenachse zu setzen, nachdem der Subplot hinzugefügt wurde:

CombinedDomainCategoryPlot mainPlot = // dein Plot;
CategoryAxis axis = // die Achse, die du verwenden möchtest.
CategoryPlot subPlot // der betreffende Subplot
mainPlot.add(subPlot);
subPlot.setDomainAxis(axis);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X