How to change the position of axes of a graph

Maybe @couet has a better idea.

{
  // create the graph
  Double_t x[3] = {0., 400., 2700.};
  Double_t y[3] = {2.3, -0.1, -0.4};
  TGraph *g = new TGraph(3, x, y);
  Double_t xmin = -300., xmax = 3100.; // x-axis range
  Double_t ymin = -0.7, ymax = 2.6; // y-axis range
  // create and draw the canvas
  TCanvas *c = new TCanvas("c", "c");
  Double_t r = Double_t(c->GetWw()) / Double_t(c->GetWh()); // aspect ratio
  Double_t ml = 0.05; // (bottom, top, left, right) margin length (percentage)
  Double_t al = 0.04; // arrow length (percentage of the pad height)
  Double_t dx = (xmax - xmin) / (1. - 2. * ml - al / r);
  Double_t dy = (ymax - ymin) / (1. - 2. * ml - al);
  c->Range(xmin - dx * ml, ymin - dy * ml,
           xmax + dx * (ml + al / r), ymax + dy * (ml + al));
  // draw the graph
  g->Draw("L*");
  // create and draw the x-axis
  TGaxis *ax = new TGaxis(xmin, 0., xmax, 0., xmin, xmax, 510, "-+S");
  ax->SetTickLength(al * r / 4.);
  ax->ChangeLabel(1, -1, -1, -1, -1, -1, " "); // remove "0"
  ax->SetLabelOffset(-0.075);
  ax->SetTitle("Retarding Potential");
  ax->SetTitleOffset(-1.5);
  ax->Draw();
  TArrow *axa = new TArrow(xmax, 0., xmax + dx * al / r, 0., al, "|>");
  axa->SetAngle(30);
  axa->Draw();
  // create and draw the y-axis
  TGaxis *ay = new TGaxis(0., ymin, 0., ymax, ymin, ymax, 510, "-+S");
  ay->SetTickLength(al / 4.);
  ay->ChangeLabel(2, -1, -1, -1, -1, -1, " "); // remove "0"
  ay->SetTitle("Photocell current");
  ay->SetTitleOffset(-1.3);
  ay->Draw();
  TArrow *aya = new TArrow(0., ymax, 0., ymax + dy * al, al, "|>");
  aya->SetAngle(30);
  aya->Draw();
}