I have a scatterplot and want to get the list of plotted points in a certain rectangular region, provided I have an x1,y1,x2,y2 rectangular region. Is there a method for this?
How about
for (int i=1; i<myhisto->GetNbinsX(); i++)
{
for (int j=1; j<myhisto->GetNbinsY(); j++)
{
if (myhisto->GetBinContent(i, j) > 0. && myhisto->GetXaxis()->GetBinCenter(i) > x1 && myhisto->GetXaxis()->GetBinCenter(i) < x2 && myhisto->GetYaxis()->GetBinCenter(j) > y1 && myhisto->GetYaxis()->GetBinCenter(j) < y2)
printf("This is your point!\n");
}
}
That doesn’t seem to work. In my test example I have a graph like this, and then getting the histogram from that.
[code] const Int_t n = 200;
Double_t x[n], y[n];
for (Int_t i=0;i<n;i++) {
x[i] = i0.1;
y[i] = 10sin(x[i]+0.2);
printf(" i %i %f %f \n",i,x[i],y[i]);
}
TGraph *gr = new TGraph(n,x,y);
gr->SetLineColor(2);
gr->SetLineWidth(4);
gr->SetMarkerColor(4);
gr->SetMarkerStyle(21);
gr->SetTitle(“a simple graph”);
gr->Draw(“AP”);
histogram = gr->GetHistogram();[/code]
Unfortunately histogram->GetNbinsY()
returns zero, so the for loop exits immediately.
Try: for (int i = 0; i < gr->GetN(); i++) {
if (gr->GetX()[i] > x1 && gr->GetX()[i] < x2 &&
gr->GetY()[i] > y1 && gr->GetY()[i] < y2) {
std::cout << i << " "
<< gr->GetX()[i] << " "
<< gr->GetY()[i] << std::endl;
}
}
Thanks! That works perfectly. Just one last question, is it possible to access the TMarker property for those points? I am not seeing an easy accessor for that.
All markers for a TGraph are the same.
If you want to draw these points with a different marker style, then the easiest way is to create (and draw) another TGraph (which would contain just your “selected” points).